2011-01-19 157 views
0

任何人都可以提出如何改进我的查询,它用于网站地图和theres 80000页,因此限制。MySql,任何人都可以建议如何提高我的查询/索引?

继承人我查询

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

我的继承人EXPLAIN

alt text

继承人的指标我已经

alt text

+2

期望改善的目标应该是什么? – Bjoern 2011-01-19 08:46:05

+0

为了让它更快,1.9秒 – Jules 2011-01-19 09:17:57

回答

0

尝试使用任何指标。 表中总共有几行?

我注意到你正在寻找约10万行的约48K行匹配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结尾。这些关键字 被允许用于将来的扩展 指定升序或降序 索引值存储。目前,他们 被解析但被忽略;索引值 总是按升序存储。

2

此查询优化指数可能会是一个COMBIN栏目RemoveMeDate,PadIDPageName

+0

我刚刚添加了该索引,但没有改进,它似乎虽然使用它,在解释它现在在键列中。请进一步建议吗? – Jules 2011-01-19 09:19:06

+0

在1.9秒内检索(最多)30000行不一定从性能角度来看不好。你确定问题不在网络或客户端? – Tommi 2011-01-19 10:34:23

相关问题