SQL查询很慢:索引?

时间:2014-08-01 10:34:23

标签: php sql indexing

我有以下SQL查询,但查询速度很慢:(页面加载2秒)。

mysql_query("select * from table_test 
WHERE ((owner = '$id' AND ownersecond = '0') OR ownersecond = '$id') 
AND catogory = '1' AND type = '$car[id]' AND caseB = '0' 
AND (timeback < TIMESTAMP(NOW()) OR timeback = '0000-00-00 00:00:00') ");

我想通过使用索引来改进SQL语句。我已经在行上有一个索引:所有者和所有者第二个。将索引放在type,caseB和tieback上是否有用?或者我越来越慢地减慢sql的速度?因为有很多指数?

或者:将上述SQL重写为更快的查询是否更好?有没有人建议更好的书面查询。提前致谢。

2 个答案:

答案 0 :(得分:1)

只关注查询(而不是过时的mysql_接口):

select *
from table_test 
WHERE ((owner = '$id' AND ownersecond = '0') OR ownersecond = '$id') AND
      catogory = '1' AND
      type = '$car[id]' AND
      caseB = '0' AND 
      timeback < TIMESTAMP(NOW()) OR timeback = '0000-00-00 00:00:00')

适当的索引位于categorytypecaseB,然后是其他列。所以试试这个指数:

create index idx_table_test_6 on table_test(category, type, caseB, timeback, owner, ownersecond)

索引可用于所有where条件,但select *需要原始数据页。

答案 1 :(得分:0)

使用EXPLAIN来诊断正在使用的索引(如果有)。我建议学习如何使用EXPLAIN,因为我们很难推荐一个额外的索引。如果我要 猜测 ,我会说您的timeback列需要索引,因为时间戳列可能更多不同于owner列。向每列添加索引将增加INSERT / UPDATE所需的时间。