我有像这样的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连接限制。
我们如何改进这种长时间运行的查询?
答案 0 :(得分:1)
强制使用articleindex上的索引很可能会伤害到你,因为你实际上并没有在where子句中引用它。存在索引以通过让您快速访问具有特定值的行来加速搜索。如果没有关于表格及其中包含的数据的更多详细信息,我无法给出更准确的答案,但您绝对应该首先删除force index。如果仍然很慢,也许您可以发布EXPLAIN (your query)
的结果。
答案 1 :(得分:0)
希望您以前听过这个,但是当有人发送
请求时您会怎么做category="';drop table articles;"
...?请使用准备好的语句与占位符一起自动清理您的值,以防止人们管理您的数据库。