首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL分区修剪始终包括不等式查询中的第一个分区

MySQL分区修剪始终包括不等式查询中的第一个分区
EN

Stack Overflow用户
提问于 2013-02-01 00:01:20
回答 1查看 404关注 0票数 2

我有一个在to_days(created_at)上按范围分区的数据库。

分区是按月分区的(p1 - p50),最后是一个pmax catchall。在下面的示例中,我预计只会命中分区p45。

当我解释分区时,select * from units where created_at > "2013-01-01 00:00:00“和NOW()

我在partitions列下列出了p1、p45

在5.1和5.5中都会发生这种情况

为什么优化器要包含第一个分区来进行不等式检查?

EN

回答 1

Stack Overflow用户

发布于 2014-09-18 06:42:05

您很久以前就问过这个问题,但我也遇到了这个问题,并在这里找到了一个解决方法:

http://datacharmer.blogspot.com/2010/05/two-quick-performance-tips-with-mysql.html

..。基本上,您应该创建一个包含小于(0)的值的第一个分区,该值将始终为空。MySQL查询优化器仍将包括第一个分区,但至少它不应该执行任何资源密集型扫描。

更新:以下是我原始答案中链接的URL的简短摘要:

官方的MySQL错误跟踪器承认这种行为是一种特性:

错误描述:

无论BETWEEN子句中的范围是什么,使用TO_DAYS函数按范围分区的表在修剪时总是包含表中的第一个分区。

响应:

这不是一个错误,因为对于无效日期,TO_DAYS()返回NULL,它还需要扫描第一个分区(因为第一个分区保存所有NULL值)。

..。

一种性能解决方法是创建一个特定的分区来保存所有空值(如'...小于(0)'),这也会捕获所有不好的日期。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14629924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档