Jak*_*pes 2 mysql partitioning
我有一个按 to_days(created_at) 范围进行分区的数据库。
分区是每月的(p1 - p50),最后有一个 pmax 包罗万象的内容。在下面的示例中,我预计只有分区 p45 会被命中。
当我进行解释分区时,从created_at>“2013-01-01 00:00:00”和NOW()的单元中选择*
我在分区列下列出了 p1,p45
5.1 和 5.5 中都会发生这种情况
为什么优化器包括用于不等式检查的第一个分区?
您很久以前就问过这个问题,但我也遇到了这个问题并在这里找到了解决方法:
http://datacharmer.blogspot.com/2010/05/two-quick-performance-tips-with-mysql.html
...基本上,您应该创建一个包含小于 (0) 的值的第一个分区,该分区始终为空。MySQL 查询优化器仍将包含第一个分区,但至少它不应该执行任何资源密集型扫描。
更新:以下是我原始答案中链接的 URL 的简短摘要:
官方 MySQL bugtracker 承认此行为是一项功能:
错误描述:
无论 BETWEEN 子句中的范围如何,使用 TO_DAYS 函数按 RANGE 分区的表在修剪时始终包含表中的第一个分区。
回复:
这不是一个错误,因为 TO_DAYS() 对于无效日期返回 NULL,它还需要扫描第一个分区(因为它保存所有 NULL 值)的范围。
...
性能解决方法是创建一个特定分区来保存所有 NULL 值(例如“... LESS THAN (0)”),这也会捕获所有错误日期。
| 归档时间: |
|
| 查看次数: |
564 次 |
| 最近记录: |