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

Php 在中有超过100万行的表上运行查询,php,mysql,sql,aggregate-functions,Php,Mysql,Sql,Aggregate Functions,我正在为Where/orderby中使用的所有列编制索引,是否还有其他方法可以加快查询速度 查询非常简单,如: SELECT COUNT(*) FROM TABLE WHERE user = id AND other_column = 'something'` 我使用的是PHP5,MySQL客户端版本:4.1.22,我的表是MyISAM。请与DBA联系。运行本地等效的showplan。对于像您的示例这样的查询,我怀疑列id和other\u列上的覆盖索引将极大地提高性能。(我假

我正在为Where/orderby中使用的所有列编制索引,是否还有其他方法可以加快查询速度

查询非常简单,如:

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

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

请与DBA联系。运行本地等效的
showplan
。对于像您的示例这样的查询,我怀疑列
id
other\u列
上的覆盖索引将极大地提高性能。(我假设
user
是一个变量或niladic函数)


一个很好的一般规则是索引中的列应该按方差的降序从左到右排列。也就是说,值变化最快的列应该是索引中的第一列,变化最慢的列应该是索引中的最后一列。似乎有悖常理,但这就是问题所在。查询优化器喜欢尽可能快地缩小范围。

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

因此,您的索引可能是:

user + otherfield1
user + otherfield2
etc.
如果您的用户id确实是有选择性的,比如几十条记录,那么该字段上的索引应该是非常有效的(亚秒返回)


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

是否同时处理所有数据?尝试计数(1)-有些人认为没有差异-值得一试-id也是数字吗?另一列是否可以是与文本不同的类型,例如enum或number@Rob:
COUNT(*)
将已经使用索引。@webbiedave对不起,请原谅我-只是查找了一下COUNT(1)与COUNT(*)没有区别@webnoob,您使用的是什么MySQL服务器版本?不,也可以使用myisam索引,只要它能找到它所需要的一切,而不必查看记录,就能看到比索引中更多的字段。