0

下面的查询从 20lacs 记录中运行超过 2.5 秒;

选择 lid,nid ,sum(nview) as view_cnt
来自 nv
盖子 = 1
分组
ORDER BY view_cnt desc
限制 20;

我更新了可能的键作为索引,请帮我优化这个查询

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE nv ref lid lid 4 const 406282 “使用位置;使用临时;使用文件排序”
4

2 回答 2

1

您可以尝试在查询中使用的所有列上添加索引:

ALTER TABLE nv ADD INDEX lnv(lid,nid,nview)

以便 mysql 使用索引中的列值,而不是仅将索引用于行查找。您应该using index在解释额外列中看到更多内容。它可能会加快您的查询速度,但不要期望太多,在这种情况下,文件排序在不更改表模式的情况下是不可避免的。

如果您决定使用此索引,则可以安全地删除单个lid列上的索引,因为复合索引也可以用于盖子查找。

于 2012-04-26T14:52:30.820 回答
0

您只索引了 lid 列,您可以将索引添加到 nid 列并验证查询执行时间

于 2012-04-26T14:07:26.700 回答