在超过100万行的表上运行查询


Running queries on tables with more than 1million rows in

我正在索引我在哪里/顺序中使用的所有列,还有什么我可以做的来加速查询吗?

查询非常简单,如:

SELECT COUNT(*) 
  FROM TABLE 
 WHERE user = id 
   AND other_column = 'something'`

我使用PHP 5, MySQL客户端版本:4.1.22,我的表是MyISAM。

与您的DBA交谈。运行本地等效的showplan。对于像您的示例这样的查询,我怀疑在列idother_column上覆盖索引将大大提高性能。(我假设user是一个变量或零函数)。

一个好的一般规则是索引中的列应该按照方差降序从左到右。也就是说,值变化最快的那一列应该是索引中的第一列,而值变化最慢的那一列应该是索引中的最后一列。听起来有点违反直觉,但就是这样。查询优化器喜欢尽可能快地缩小范围。

如果您的所有查询都包含一个用户id,那么您可以假设userid应该包含在每个索引中,可能作为第一个字段。(我们可以假设用户id是高度选择性的吗?也就是说,任何单个用户的记录都不会超过几千条?)

所以你的索引可能是:

user + otherfield1
user + otherfield2
etc.

如果您的用户id 确实是选择性的,比如几十条记录,那么仅在该字段上的索引应该是相当有效的(亚秒返回)。

"user + otherfield"索引的好处是mysql甚至不需要查看数据记录。索引为每条记录都有一个指针,它可以对指针进行计数。