Mysql分区列(日期)执行计划
Posted
技术标签:
【中文标题】Mysql分区列(日期)执行计划【英文标题】:Mysql partition columns (Date) execute plan 【发布时间】:2017-11-30 12:13:46 【问题描述】:这就是表格的结构:
2017 年 11 月 30 日,北京。 我想使用分区列来更有效地获取我的数据,你可以看到两个不同sql之间的执行计划:
我想确定为什么两者的执行计划不同? 其实我也想用sql2,但是慢了两个。 我对这个问题感到困惑。感谢您提前回答。
【问题讨论】:
您缺少图像。因此,您的问题解释性不够。除非您更正您的问题,否则请准备好接受某人的反对票。 问题是什么?你什么都没问。 第一次提问,看图不方便.. 我认为他不能插入只有 1 个代表的图像。考虑将代码复制到问题中(代码足够短,所以应该这样做)。 欢迎来到 Stack Overflow。不要将图像放在您的问题中。相反,edit 您的问题并剪切并粘贴您将放入图像中的材料的文本。 Stack Overflow 的目的是帮助未来的其他人以及您。 【参考方案1】:这两个查询不同...
WHERE datecolumn = CONSTANT
和
WHERE datecolumn = DIRTY(GREAT(FUNCTIONAL(expression)))
在第二种方式中,mysql 查询规划器无法充分了解要使用哪些 datecolumn
值来让它只选择一个要搜索的分区。
请注意,使用分区来提高查询性能可能没有意义,除非
-
您已经尽了一切努力使用索引来提高性能。
您的表至少包含 1 亿行。
分区让您可以快速换出旧数据。但是让它提高性能非常困难,并且限制了您可以执行的查询类型。如果您的劳动物有所值,请将十分之一的钱花在一些 SSD 磁盘上。
【讨论】:
你明白我的意思!我想使用分区来使查询更快。我提到的只是一个示例。我制作了一个包含许多已连接的分区表的 sql,但我只想使用其中一个分区。我怎样才能让它更快? 我使用另一种方式将变量转换为常量。谢谢~ 还有,我用now()代替sysdate(),达到了我的目的~ 更好,CURDATE() - INTRVAL 1 DAY
以上是关于Mysql分区列(日期)执行计划的主要内容,如果未能解决你的问题,请参考以下文章