【发布时间】:2017-02-21 07:03:23
【问题描述】:
我有一个有两个分区的表。分区为pactive = 1 和pinactive = 0。我知道两个分区并没有太大的收获,但我已经用它来截断和加载一个分区并在另一个分区中进行普通插入。
当我创建索引时,问题就来了。
查询是这样的
select partitionflag,companyid,activityname
from customformattributes
where companyid=47
and activityname = 'Activity 1'
and partitionflag=0
创建索引 -
create index idx_try on customformattributes(partitionflag,companyid,activityname,completiondate,attributename,isclosed)
将从上述查询中检索大约 200000 条记录。但是查询连同提到的索引需要 30 多秒。这么长时间的原因是什么?此外,如果从提到的索引中删除 partitionflag,则该索引甚至不会被使用。
而且是理解,
- 即使有可用的分区,优化器也需要在索引定义中提到所需的分区,以便它只命中所需的分区----正确吗?
任何关于理解这一点的想法都会非常有帮助
【问题讨论】:
-
没有解释输出,我们只能猜测。
-
嗨,请在下面找到计划详细信息 id - 1 select_type - SIMPLE table - customformattributes type - ref possible_keys - idx_try key - idx_try key_len - 213 ref - const, const, const rows - 247892 过滤 - 100.00额外 - 使用 where;使用索引
-
我不认为查询执行计划有什么特别错误的地方。你有一个很大的结果集。您是否尝试过减少结果集并以这种方式检查查询性能?
标签: mysql performance indexing partition