查看原文
其他

《叶问》第28期,表里某个字段,同时创建了索引和直方图,执行计划会怎么选择

小知 老叶茶馆 2024-07-08

亲测在有索引的情况下,优化器会选择索引统计信息而非直方图,例如:

"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数据类型、空间数据类型

    • 已创建唯一索引的单列

更多内容请移步叶老师最新推文:《一文读懂MySQL 8.0直方图》

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存