亲测在有索引的情况下,优化器会选择索引统计信息而非直方图,例如:
代码语言:javascript复制"considered_execution_plans": [
{
"table": "`t1`",
"chosen": true,
"plan_prefix": [],
"cost_for_plan": 0.35,
"rows_for_plan": 1,
"best_access_path": {
"considered_access_paths": [
{
"cost": 0.35, cost这个就非常低,所以毫无悬念的选择索引
"rows": 1,
"index": "k1",
"chosen": true,
"access_type": "ref"
},
{
"cause": "heuristic_index_cheaper",
"chosen": false,
"access_type": "range",
"range_details": {
"used_index": "k1"
}
}
]
},
"condition_filtering_pct": 100
}
对于直方图有几点说明:
- 通常可以依靠索引的执行计划是最好的,直方图统计信息对于非索引列特别有用
- 直方图并不像MySQL的索引一样会自动维护,必须通过手动去维护,线上建议业务低峰期进行维护
- 通常来说直方图的适用场景是:
- 随时间变化不大的值
- 低基数值
- 分布不均
- 直方图无法使用的场景是:
- 加密表、临时表
- JSON数据类型、空间数据类型
- 已创建唯一索引的单列