› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
54qyc
V2EX  ›  MySQL

MySQL 索引合并总结与问题

  •  
  •   54qyc · Aug 30, 2023 · 1942 views
    This topic created in 1130 days ago, the information mentioned may be changed or developed.

    总结了下,其中有一些并没查到文档描述,所以有猜测成分,如有错误请指出。

    索引合并主要分 3 类

    索引交集合并

    限制条件: where 必须是 or 连接的多个条件,并且每个条件是等值匹配匹配的二级索引或者范围匹配的主键索引。

    动机:当优化器发现使用多个索引取交集减少的回表成本超过使用多个索引读取新增的成本时,会使用索引交集合并优化。(之所以限制中二级索引是等值匹配,是因为范围匹配极大概率减少的成本不如新增的成本?直接一刀切?作为对比,索引并集合并则支持 range 匹配)

    索引并集合并(支持 range 匹配二级索引的叫做索引并集排序合并,感觉没必要区分这 2 类)

    限制条件: where 必须是 and 连接的多个条件,并且每个条件是范围匹配的二级索引或者主键索引或者可以用索引交集合并优化的条件。

    动机: 如果不使用多个索引取并集,则只能去全表扫描。但是使用多个索引取并会新增一个排序成本,就是多个索引取出来的记录可能存在重复,需要按照 ID 排序去重(这里文档只说了排序,没有说原因,原因个人猜测是为了去重?对吗?)。所以优化器还会考虑使用多个索引查询出来的记录多不多,如果太多排序的代价超过全表扫描代价,就仍然会选择全表扫描?

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2408 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 95ms · UTC 15:02 · PVG 23:02 · LAX 08:02 · JFK 11:02
    ♥ Do have faith in what you're doing.