我正在索引我在Where / Order by中使用的所有列,我还能做些什么来加快查询速度吗?
查询非常简单,例如:
SELECT COUNT(*)
FROM TABLE
WHERE user = id
AND other_column = 'something'`
我使用的是PHP 5,MySQL客户端版本:4.1.22,我的表格是MyISAM。
答案 0 :(得分:7)
与您的DBA交谈。运行本地等效的showplan
。对于像您的示例一样的查询,我怀疑列id
和other_column
上的覆盖索引会大大加快性能。 (我假设user
是变量或niladic函数)。
一个很好的一般规则是索引中的列应按方差的降序从左到右。也就是说,值变化最快的列应该是索引中的第一列,而变化最快的列应该是索引中的最后一列。似乎反直觉,但你去。查询优化器喜欢尽可能快地缩小范围。
答案 1 :(得分:1)
如果您的所有查询都包含用户ID,那么您可以假设userid应该包含在每个索引中,可能作为第一个字段。 (我们可以假设用户ID具有高度选择性吗?即任何一个用户都没有超过几千条记录?)
所以你的索引可能是:
user + otherfield1
user + otherfield2
etc.
如果您的用户ID是真的选择性,就像几十条记录一样,那么该字段上的索引应该非常有效(亚秒返回)。
“user + otherfield”索引的好处是mysql甚至不需要查看数据记录。索引有一个指针用于每条记录,它只能计算指针。