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,我不确定我的索引是不是正确,或者我是不是可以提高查询速度?的主要内容,如果未能解决你的问题,请参考以下文章

索引键是不是足够或者我应该添加外键

如何检查我的本地“mysql”服务器是不是正常工作?

这种重新分配方法是不是正确[重复]

我的自定义损失函数是不是正确? (火炬)

确定复合图案是不是正确使用

索引一个不断变化的字段是不是合理,或者不断写入会降低性能?