MySql,我不确定我的索引是不是正确,或者我是不是可以提高查询速度?
Posted
技术标签:
【中文标题】MySql,我不确定我的索引是不是正确,或者我是不是可以提高查询速度?【英文标题】:MySql, I'm not sure if my indexes are correct or if I can improve the speed of my query?MySql,我不确定我的索引是否正确,或者我是否可以提高查询速度? 【发布时间】:2011-03-08 09:22:10 【问题描述】:我的查询是选择日期和数字键范围,我不确定是否可以改进,但我想我会问。我希望能提高速度。
我实际上正在运行两个非常相似的查询,一个用于计数,一个用于获取有限制的记录
SELECT count(Pads.PadID) AS CountOfPadID FROM Pads WHERE ((RemoveMeDate=
'2001-01-01 00:00:00') AND (catid between 0 and 11))
ORDER BY VersionAddDate DESC;
SELECT PadID, CatID, IconSoureURL, OsStr, ProgramName, PageName, ProgramVersion,
left(English450,650) as English450, English45, ProgHomeURL, DownloadURL, License,
ReleaseStatus FROM Pads WHERE RemoveMeDate='2001-01-01 00:00:00' AND catid
between 0 and 11 ORDER BY VersionAddDate DESC LIMIT 0,20;
是的,范围可以改变,可以是 100 到 111
我的第一个查询需要 0.6 秒,奇怪的是,即使使用 SQL_NO_CACHE,第二个查询也相当快。
这是第一个查询的解释结果。
这是我当前的索引
【问题讨论】:
可以去掉RemoveMeDatw
单列上的索引RemoveMeDate
,它将被其他以RemoveMeDate
开头的索引覆盖
【参考方案1】:
您的两个查询都返回相同的数据,可能是不同的顺序。但是它们在磁盘/表空间上触及相同的数据/也可能是相同的索引(您能否解释一下查询 2)。第一个查询实际上为您预热缓存,它将在内存中获取数据,因此第二个查询很快。
我们可以让它更快吗?可能它已经非常快了,它只看 3 条记录,所以索引是完美的。第一次查询可能是在冷缓存/缓冲池上完成的。下次进行基准测试时,首先通过运行一些随机查询和检查来预热缓存。
正如@The-Scrum-Meister 所建议的,您可以删除索引RemoveMeDate
,它会加快您的插入速度,如果现在使用它会减少一些内存压力。
检查您是否需要调整服务器/存储引擎本身,以充分利用可用硬件并提高服务器速度。
【讨论】:
以上是关于MySql,我不确定我的索引是不是正确,或者我是不是可以提高查询速度?的主要内容,如果未能解决你的问题,请参考以下文章