博客
关于我
mysql 中索引的问题
阅读量:793 次
发布时间: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/

    你可能感兴趣的文章
    MS UC 2013-0-Prepare Tool
    查看>>
    MSBuild 教程(2)
    查看>>
    msbuild发布web应用程序
    查看>>
    MSB与LSB
    查看>>
    MSCRM调用外部JS文件
    查看>>
    MSCRM调用外部JS文件
    查看>>
    MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
    查看>>
    MsEdgeTTS开源项目使用教程
    查看>>
    msf
    查看>>
    MSP430F149学习之路——SPI
    查看>>
    msp430入门编程45
    查看>>
    MSP借助五招让中小企业签约云计算服务
    查看>>
    MSSQL数据库查询优化(一)
    查看>>
    MSSQL数据库迁移到Oracle(二)
    查看>>
    MSSQL日期格式转换函数(使用CONVERT)
    查看>>
    MSSQL注入入门讲解:保护你的数据库免受攻击
    查看>>
    MSSQL部分补丁的列表及下载地址(持续更新)
    查看>>
    MSTP多生成树协议(第二课)
    查看>>
    MSTP是什么?有哪些专有名词?
    查看>>
    myeclipse将怎么java编译器改成jdk1.7的版本
    查看>>