2010-05-19 47 views
0

如果这是一个愚蠢的问题,我很抱歉(因为这听起来不太可能)。mysql/innodb表的索引部分?

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

有没有办法,我可以索引这些行,当我调用select时,我会一定要通过这个条件吗?

+0

听起来表分区可以帮助:http://dev.mysql.com/tech-resources/articles/mysql_5.1_partitions。 html – 2010-05-19 16:06:06

+0

感谢您的提示!非常感谢。如果你添加它作为答案,我会投它 – 2010-05-19 16:52:35

回答

1

我会建议将表分成两个单独的表。但是如果你不想这样做,如果你总是在你的查询中包含“where app_user = 1”,那么执行此操作的最高性能方法是在包含app_user列的表上创建一个主键作为关键的第一部分。 InnoDB将使用它作为聚集索引,为您节省一些额外的磁盘访问。您可以创建表是这样的:

创建表TestTable的( APP_USER TINYINT UNSIGNED默认为0, ID INT UNSIGNED NOT NULL, 名称为varchar(255),默认', PRIMARY KEY K1(APP_USER,ID) )ENGINE = InnoDB;

一个朋友在InnoDB中写了这篇文章上聚集索引而回: http://www.joehruska.com/?p=6

1

添加一个名为app_user和index的列,然后在查询中传入“WHERE app_user = 1”。

您可以进一步根据该列对表格进行分区。

+0

多么酷的新功能 - 谢谢! – 2010-05-19 16:52:06