如果这是一个愚蠢的问题,我很抱歉(因为这听起来不太可能)。
我有一张2000万行的表。但是,这些行中只有大约300K可以定期访问,并且可以在名为“app_user = 1”的列条件中识别它们
无论如何,我可以将这些行编入索引,当我调用select时,我也一定会传入这个条件吗?
答案 0 :(得分:1)
在其上添加一个名为app_user和index的列,然后在查询中传入“WHERE app_user = 1”。
您可以根据该列进一步对表进行分区。
答案 1 :(得分:1)
我建议将表拆分为两个单独的表。但是如果您不想这样做,那么如果您总是要在查询中包含“where app_user = 1”,那么执行此操作的最高性能方法是在包含app_user列的表上创建主键作为关键的第一部分。 InnoDB将使用它作为聚簇索引,为您节省一些额外的磁盘访问。您可以像这样创建表:
创建表testTable( app_user tinyint UNSIGNED默认值0, id int UNSIGNED NOT NULL, name varchar(255)default'', PRIMARY KEY k1(app_user,id) )ENGINE = InnoDB;
一位朋友在InnoDB中写了一篇关于聚簇索引的文章: http://www.joehruska.com/?p=6