改进长mysql查询

时间:2010-04-16 04:49:37

标签: mysql

我有像这样的php mysql查询

$query = <<<EOS
    SELECT * FROM articles 
      FORCE INDEX (articleindex) 
      WHERE category='$thiscat' AND did>'$thisdid' 
        AND mid!='$thismid' AND status='1' 
        AND group='$thisgroup' AND pid>'$thispid' 
      LIMIT 10
EOS;

作为优化,我已经索引了articleindex中的所有参数,并且我使用强制索引来强制mysql使用索引,据说可以加快处理速度。

但似乎这个查询仍然非常慢,并且导致卡住并最大化了最大mysql连接限制。

我们如何改进这种长时间运行的查询?

2 个答案:

答案 0 :(得分:1)

强制使用articleindex上的索引很可能会伤害到你,因为你实际上并没有在where子句中引用它。存在索引以通过让您快速访问具有特定值的行来加速搜索。如果没有关于表格及其中包含的数据的更多详细信息,我无法给出更准确的答案,但您绝对应该首先删除force index。如果仍然很慢,也许您可​​以发布EXPLAIN (your query)的结果。

答案 1 :(得分:0)

希望您以前听过这个,但是当有人发送

请求时您会怎么做
category="';drop table articles;"

...?请使用准备好的语句与占位符一起自动清理您的值,以防止人们管理您的数据库。