我有一个表由id上的范围和代码上的哈希(都是整数)分区。 30个分区,每个4个散列子分区,共120个。
如果我单独选择id,解释计划显示它正确地仅修剪到分区&与之相关的子分区(4)
如果我对id +代码进行选择,解释计划显示它正确地修剪到与其相关的一个特定子分区(1)
...无论其
如果我单独选择代码,解释计划似乎表明MySQL正在进行全表扫描(120个分区),而不是像Oracle一样,只扫描每个分区中相关的一个子分区(共30个)。
当无法删除整个分区时,我是否必须做一些特别的事情来让MySQL利用子分区修剪?或者MySQL(至少5.1)不支持自己利用子分区?
答案 0 :(得分:0)
我找到了答案。似乎只有MySQL 5.5和更新版本能够独立于主分区值来利用子分区。有一天,我会记得开始关注我正在阅读哪个版本的MySQL文档。
最后的例子:
假设'table'按A上的范围分区,并且按B上的哈希分区。
查询1:“SELECT * from table,其中A =?且B =?且C =?”:
查询2:“从表中选择A,其中B =?且C =?”:
可能在MySQL 5.5及更高版本下按预期工作。如果Oracle正常工作,在最坏的情况下,它将从每个分区范围中搜索单个子分区。如果你有20个分区范围和4个子分区,最坏的情况是它会通过20个子分区进行暴力搜索。
在MySQL 5.1下无法正常工作。它将逐个遍历所有80个子分区,并基本上进行全表扫描。