mysql表中有一个表,它有大约176万条记录并且还在增长.似乎记录越多,记录就越慢.下面运行一个简单的查询大约需要65秒. Date_run是一个时间戳字段.我想知道是否会让它运行得慢一些.我可以在选项文件中调整任何建议,以使这个宝贝更快?
select *from stocktrackwhere 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上提出.
总结以上是内存溢出为你收集整理的Mysql查询在时间戳的日期范围内非常慢全部内容,希望文章能够帮你解决Mysql查询在时间戳的日期范围内非常慢所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)