【问题标题】:Mysql partition columns (Date) execute planMysql分区列(日期)执行计划
【发布时间】:2017-11-30 12:13:46
【问题描述】:

这就是表格的结构:

2017 年 11 月 30 日,北京。 我想使用分区列来更有效地获取我的数据,你可以看到两个不同sql之间的执行计划:

我想确定为什么两者的执行计划不同? 其实我也想用sql2,但是慢了两个。
我对这个问题感到困惑。感谢您提前回答。

【问题讨论】:

  • 您缺少图像。因此,您的问题解释性不够。除非您更正您的问题,否则请准备好接受某人的反对票。
  • 问题是什么?你什么都没问。
  • 第一次提问,看图不方便..
  • 我认为他不能插入只有 1 个代表的图像。考虑将代码复制到问题中(代码足够短,所以应该这样做)。
  • 欢迎来到 Stack Overflow。不要将图像放在您的问题中。相反,edit 您的问题并剪切并粘贴您将放入图像中的材料的文本。 Stack Overflow 的目的是帮助未来的其他人以及您。

标签: mysql sql query-performance database-partitioning database-indexes


【解决方案1】:

这两个查询不同...

 WHERE datecolumn = CONSTANT

 WHERE datecolumn =  DIRTY(GREAT(FUNCTIONAL(expression)))

在第二种方式中,MySQL 查询规划器无法充分了解要使用哪些 datecolumn 值来让它只选择一个要搜索的分区。

请注意,使用分区来提高查询性能可能没有意义,除非

  1. 您已经尽了一切努力使用索引来提高性能。
  2. 您的表至少包含 1 亿行。

分区让您可以快速换出旧数据。但是让它提高性能非常困难,并且限制了您可以执行的查询类型。如果您的劳动物有所值,请将十分之一的钱花在一些 SSD 磁盘上。

【讨论】:

  • 你明白我的意思!我想使用分区来使查询更快。我提到的只是一个示例。我制作了一个包含许多已连接的分区表的 sql,但我只想使用其中一个分区。我怎样才能让它更快?
  • 我使用另一种方式将变量转换为常量。谢谢~
  • 还有,我用now()代替sysdate(),达到了我的目的~
  • 更好,CURDATE() - INTRVAL 1 DAY
猜你喜欢
  • 1970-01-01
  • 2016-08-12
  • 2014-06-08
  • 2021-01-27
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 2019-02-12
  • 2016-07-07
相关资源
最近更新 更多