【发布时间】:2009-02-04 19:27:26
【问题描述】:
每次保存页面编辑时,PHPWiki 都会有 5 秒的慢查询。 “mysql-slow.log”中经常出现的查询是:
INSERT INTO wikiscore
SELECT w1.topage, COUNT(*)
FROM wikilinks AS w1, wikilinks AS w2
WHERE w2.topage=w1.frompage
GROUP BY w1.topage;
目前的指标如下:
table "wikilinks" has a primary index on "frompage" and "topage"
table "wikiscore" has a primary index on "pagename" and "score"
如何重新编写 SELECT 查询以更快地返回相同的结果?我如何更改索引以便此查询更快?我的想法是它可能被过度索引了吗?
我只对查询的 SELECT 部分的结果进行了计时,仅需要 1-2 秒。 INSERT 必须占用剩下的时间。
保存我想消除的页面时存在延迟。由于已完成大量修改,我无法选择升级到另一个 wiki 引擎(或 PHPwiki 版本)。
有什么想法吗?
编辑---
查询的 SELECT 部分的“EXPLAIN”的结果是:
SIMPLE
w2
index
PRIMARY
204
31871
Using index; Using temporary; Using filesort
SIMPLE
w1
ref
PRIMARY
PRIMARY
102
phpwiki.w2.topage
14
Using index
【问题讨论】:
-
慢查询日志现在说:# Query_time: 4 Lock_time: 0 Rows_sent: 0 Rows_examined: 416659 在我更改索引之前(参见下面的 cmets)这个日志说:# Query_time: 5 Lock_time: 0 Rows_sent : 0 Rows_examined: 445641