索引部分mysql / innodb表?

时间:2010-05-19 16:03:56

标签: mysql indexing innodb

如果这是一个愚蠢的问题,我很抱歉(因为这听起来不太可能)。

我有一张2000万行的表。但是,这些行中只有大约300K可以定期访问,并且可以在名为“app_user = 1”的列条件中识别它们

无论如何,我可以将这些行编入索引,当我调用select时,我也一定会传入这个条件吗?

2 个答案:

答案 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