索引有哪些并解释下回表查询,索引覆盖和索引下推,如何开启慢查询?

📅 发布时间:2026/8/21 14:28:26
索引有哪些并解释下回表查询,索引覆盖和索引下推,如何开启慢查询? 索引按存储方式分两类聚集索引和非聚集索引聚集索引决定数据在磁盘上的物理排序叶子节点存储行记录,一个表只能有一个聚集索引。类似与字典目录索引。在innodb中主键索引是聚集索引(主键只是确定表格逻辑组织方式)。如果表没有定义主键则第一个not NULL unique列是聚集索引, 否则InnoDB会创建一个隐藏的row-id作为聚集索引;非聚集索引二级索引是整棵树包含根、内部节点、叶子不直接存数据只负责路由,叶子节点(存储的是【索引键值 聚集索引键主键值】用来作为回表的最终指针),按数据结构分有5种索引普通索引、联合索引、哈希索引、全文索引、唯一索引普通索引:单个字段的b树索引联合索引多个字段上建立的索引,最左匹配规则能够加速复合查询条件的检索。Hash索引Hash索引底层是哈希表哈希表是一种以key-value存储数据的结构只适用于等值查询的场景没办法利用索引完成排序,不支持多列联合索引的最左匹配规则。InnoDB用户无法手动创建哈希索引这一层上说InnoDB确实不支持。InnoDB会自调优,如果判定建立自适应哈希索引,能够提升查询效率,InnoDB自己会建立相关哈希索引全文索引fulltext通过关键字在词典中匹配来进行查询过滤查询时格式match(field) against(待查字典字符串逗号分隔)唯一索引与普通索引类似不同的就是索引列的值必须唯一但允许有空值。如果是组合索引则列值的组合必须唯一.主键索引是特殊的唯一索引, 不允许有空值。回表查询先通过非聚集索引定位到主键值, 在通过聚集索引定位到行记录, 它的性能较扫一遍索引树更低。索引覆盖:如果select的列包含在所建的索引中则直接在二级索引上就可以查到对应值不需要通过rowId经过回表去查聚集索引。索引条件下推indexconditionpushdown存储引擎通过在二级索引(只在二级索引这生效)这里过滤主键值减少需要回表的次数就不需要全部查询出来后在server端过滤。目标就是为了减少访问表的完整行数从而减少I/O操作。慢查询开启:两种方式一种修改配置另一种修改变量(变量重启失效)set globalslow_query_logON;开启存储位置set globalslow_query_log_file‘地址’设置超过多少时间即记录慢sqlset globallong_query_time设置秒;