加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Mysql查询在时间戳的日期范围内非常慢

发布时间:2021-03-06 16:23:43 所属栏目:MySql教程 来源:网络整理
导读:mysql表中有一个表,它有大约176万条记录并且还在增长.似乎记录越多,记录就越慢.下面运行一个简单的查询大约需要65秒. Date_run是一个时间戳字段.我想知道是否会让它运行得慢一些.我可以在选项文件中调整任何建议,以使这个宝贝更快? select *from stocktrack

mysql表中有一个表,它有大约176万条记录并且还在增长.似乎记录越多,记录就越慢.下面运行一个简单的查询大约需要65秒. Date_run是一个时间戳字段.我想知道是否会让它运行得慢一些.我可以在选项文件中调整任何建议,以使这个宝贝更快?

select *
from stocktrack
where date(date_run) >= '2014-5-22'
and date(date_run) <= '2014-5-29'

> mysql 5.6版
> Windows 8.1 64位
>英特尔酷睿i7-4770,3.40Ghz 12GB RAM 最佳答案 要提高此查询的性能,请使用合适的索引(将date_run作为索引中的前导列),并在等效谓词中引用“裸列”.

在函数中包装列(如DATE(),就像在查询中一样)会禁用MySQL优化器使用范围扫描操作.通过查询,即使索引可用,每次运行该查询时,MySQL都会对表中的每一行进行完整扫描.

为了提高性能,请在“裸”列上使用谓词,例如:

WHERE date_run >= '2014-5-22' AND date_run <  '2014-5-29' + INTERVAL 1 DAY

(注意,当我们省略日期文字的时间部分时,MySQL假设时间组件为午夜’00:00:00′.我们知道每个日期时间/时间戳值,日期组件等于’2014-05-29’保证不到’2014-05-30’的午夜.)

MySQL需要适当的索引才能对此特定查询使用有效的范围扫描操作.适合此查询的最简单索引是:

... ON stocktrack (date_run) 

(请注意,任何以date_run作为前导列的索引都是合适的.)

使用索引的范围扫描操作(通常)在大型集合上(通常)更有效(和更快),因为MySQL可以非常快速地从考虑中消除大量行.如果没有范围扫描操作,MySQL必须检查表中的每一行.

使用EXPLAIN来比较原始和修改之间的MySQL查询计划.

你问的问题……

“…对选项文件的任何调整……”

该问题的答案实际上取决于您使用的是哪个存储引擎(MyISAM或InnoDB).降压的最大好处来自于分配足够的缓冲区来保存内存中的数据库块,以减少I / O ……但这样做的代价是可以为运行的其他任何内存提供更少的内存,并且过度分配没有任何好处记忆.关于MySQL服务器调优的问题,除了查询性能之外,最好在dba.stackexchange.com上提出.

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读