博客
关于我
mysql 中索引的问题
阅读量:798 次
发布时间:2023-02-10

本文共 1645 字,大约阅读时间需要 5 分钟。

MySQL索引口诀及使用EXPLAIN检查索引的实用指南

1. MySQL索引口诀

在数据库优化中,索引是提升查询性能的关键工具之一。以下是MySQL索引使用的口诀,帮助开发人员更好地理解索引的原则和使用方法:

  • 全值匹配优先

    MySQL首选满足条件的全值匹配,而不是部分值。例如,在WHERE条件中,尽量使用完整的列值进行匹配。

  • 最左前缀原则

    在复合索引中,优先选择最左边的前缀。因为索引树是基于最左边的键进行搜索的,前缀越长,搜索效率越高。

  • 索引列少计算,范围查询少失效

    避免在索引列上进行范围查询(如WHERE a BETWEEN 1 AND 100),因为这会导致索引失效,影响查询性能。

  • LIKE百分比写在最后

    LIKE条件中,百分比比较 (%) 最好放在最后,避免索引失效。

  • 覆盖索引不写星号

    使用覆盖索引时,不需要在WHEREHAVING中写*,因为这会导致索引失效。

  • JOIN类型一致,ORDER条件明确

    JOIN操作中,确保连接类型一致(如eq_refref等),避免不必要的索引失效。

  • 避免使用OR空值或0/1条件

    WHEREHAVING子句中,避免使用空值或0/1进行比较,这会导致索引失效。

  • 2. 使用EXPLAIN检查SQL语句中的索引使用情况

    EXPLAIN是MySQL提供的一种强有力的工具,用于分析和优化SQL语句。以下是使用EXPLAIN的基本方法及解读结果:

  • 基本用法

    使用EXPLAIN时,默认会输出非扩展版的结果。要查看详细信息,可以在命令末尾添加EXPLAIN extendedEXPLAIN all

  • 全表扫描与索引使用情况

    • 全表扫描(没有使用索引)

      EXPLAIN extended SELECT * FROM pay_refund_detail

      结果中的type列显示为systemconst,表示查询未使用索引,可能是因为没有合适的索引存在或索引失效。

    • 使用索引

      EXPLAIN extended SELECT * FROM pay_refund_detail WHERE order_code=123

      结果中的type列显示为eq_refref,表明查询成功使用了索引。

  • 解读EXPLAIN结果

    以下是EXPLAIN输出的主要字段及其含义:

    • id:SELECT查询序列号。
    • select_type:查询类型,如SIMPLEDEPENDENT SUBQUERY等。
    • table:查询涉及的表名。
    • type:联接类型,如eq_ref(最佳)、ref(次优)、index等。
    • possible_keys:MySQL可用的索引列表。
    • key:实际使用的索引名,NULL表示未使用索引。
    • key_len:使用的索引长度。
    • ref:与索引匹配的列名或常数值。
    • rows:估计需要检查的行数。
    • `filtered:通过条件筛选的行数百分比。
    • Extra:详细信息,包括是否使用了索引、临时表等。
  • 3. 字段解释

    在使用EXPLAIN工具时,了解每个字段的含义可以帮助你更好地分析和优化查询。以下是EXPLAIN输出中常见字段的解释:

    • id:SELECT查询的唯一标识符。
    • select_type:查询类型,包括SIMPLEPRIMARYUNION等。
    • table:查询结果引用的表名。
    • type:联接类型,决定了查询效率和索引使用情况。
    • possible_keys:MySQL可用的索引列表,帮助你确定是否需要添加索引。
    • key:实际使用的索引,NULL表示未使用索引。
    • key_len:索引的长度,长度越长,索引的选择范围越大。
    • ref:与索引列匹配的列名或常数值。
    • rows:估计需要检查的行数,帮助评估查询性能。
    • filtered:通过条件筛选的行数百分比,评估过滤效果。
    • Extra:详细信息,包括索引使用情况、是否使用了临时表等。

    通过以上方法和工具,你可以更好地了解SQL语句的执行情况,优化索引使用,提升数据库性能。

    转载地址:http://wwbfk.baihongyu.com/

    你可能感兴趣的文章
    mysql5.6 TIME,DATETIME,TIMESTAMP
    查看>>
    mysql5.6.21重置数据库的root密码
    查看>>
    Mysql5.6主从复制-基于binlog
    查看>>
    MySQL5.6忘记root密码(win平台)
    查看>>
    MySQL5.6的Linux安装shell脚本之二进制安装(一)
    查看>>
    MySQL5.6的zip包安装教程
    查看>>
    mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
    查看>>
    Webpack 基本环境搭建
    查看>>
    mysql5.7 安装版 表不能输入汉字解决方案
    查看>>
    MySQL5.7.18主从复制搭建(一主一从)
    查看>>
    MySQL5.7.19-win64安装启动
    查看>>
    mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
    查看>>
    MySQL5.7.37windows解压版的安装使用
    查看>>
    mysql5.7免费下载地址
    查看>>
    mysql5.7命令总结
    查看>>
    mysql5.7安装
    查看>>
    mysql5.7性能调优my.ini
    查看>>
    MySQL5.7新增Performance Schema表
    查看>>
    Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
    查看>>
    Webpack 之 basic chunk graph
    查看>>