MySql,任何人都可以建议如何改进我的查询/索引?

时间:2011-01-19 08:41:52

标签: sql mysql indexing query-optimization

任何人都可以建议我如何改进我的查询,它用于站点地图和theres 80000页,因此限制。

继承我的查询

SELECT PageName
FROM pads
WHERE RemoveMeDate = '2001-01-01 00:00:00'
ORDER BY PadID DESC
LIMIT 20000 , 30000

继承我的解释

alt text

继承我已经

的索引

alt text

3 个答案:

答案 0 :(得分:2)

此查询的最佳索引可能是列RemoveMeDatePadIDPageName的组合索引。

答案 1 :(得分:0)

如果没有自动选择正确的索引,你应该查看“强制索引”或“使用索引”。

http://dev.mysql.com/doc/refman/5.1/en/index-hints.html

答案 2 :(得分:0)

使用任何索引尝试。 整个表格中有多少行?

我注意到你正在寻找大约48k行中的10k行,只匹配RemoveMeDate - 表必须很大,或者你必须选择大部分表。

SELECT PageName
FROM pads USE INDEX()
WHERE RemoveMeDate = '2001-01-01 00:00:00'
ORDER BY PadID DESC
LIMIT 20000 , 30000

不使用任何索引强制它只扫描表。 现在,如果这没有帮助并且速度较慢,请尝试制作一个订购DESC的特定索引,例如尝试下面两个中的一个

CREATE INDEX IX_pads_rmd_iddesc ON pads (RemoveMeDate, PadID DESC, PageName)
CREATE INDEX IX_pads_rmd_iddesc ON pads (RemoveMeDate, PadID DESC)

如果未自动选择,则与FORCE INDEX结合使用

SELECT PageName
FROM pads USE INDEX(IX_pads_rmd_iddesc)
WHERE RemoveMeDate = '2001-01-01 00:00:00'
ORDER BY PadID DESC
LIMIT 20000 , 30000

请注意,即使索引重新创建了“PadID DESC”,MySQL也会忽略它。人们可以希望有一天它实施后就会落实到位。

  

index_col_name规范可以   以ASC或DESC结束。这些关键字   允许将来的扩展   用于指定升序或降序   索引值存储。目前,他们   被解析但被忽略;指数值   总是以升序存储。