• MySQL学习笔记九:索引


    一、索引分类

    1.1、索引的分类有以下几种:

    1)单值索引:即一个索引只包含单个列,一个表可以有多个单列索引。

    2)唯一索引:索引列的值必须唯一,但允许有空值。

    3)复合索引:一个索引包含多个列,如INDEX MultiIdx(id,name,age)

    4)全文索引:只有在MyISAM引擎上才能使用,只能在CHAR、VARCHAR、TEXT类型字段上使用全文索引。

    5)空间索引:空间索引是对空间数据类型的字段建立的索引。

    二、索引操作

    2.1、创建索引

    语法:CREATE INDEX 索引名称 ON table (column[,column]...);

    CREATE INDEX ID_INDEX ON emp (ID);
    CREATE INDEX NAME_INDEX ON emp (NAME);

    2.2、删除索引

    语法:DROP INDEX 索引名称 ON 表名;

    DROP INDEX NAME_INDEX ON emp;

    2.3、查看索引

    语法:SHOW INDEX FROM 表名;

    SHOW INDEX FROM emp;

    2.4、自动创建索引

    1)在表上定义了主键时,会自动创建一个对应的唯一索引。

    2)在表上定义了一个外键时,会自动创建一个普通索引。

    三、EXPLAIN

    3.1、关于EXPLAIN

    作用:用来查看索引是否正在被使用,并且输出其使用的索引的信息。

    3.2、EXPLAIN使用示例

    3.3、EXPLAIN输出信息

    id:select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。

    select_type:所使用的SELECT查询类型。

    table:显示这一行的数据是关于哪张表的。

    type:type显示的是访问类型,是较为重要的一个指标,结果值从最好到最差依次是:system>const>eq_ref>ref<range>index>all(倒序)一般来说,保证查询至少达到range级别,最好能达到ref。

    key:实际使用的索引,若为null,则没有使用到索引。(两种可能,①没建立索引。②建立索引,但索引失效)。查询中若使用了覆盖索引,则该索引仅出现在key列表中。

    possible_keys:显示可能应用在这张表中的索引,一个或多个。查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用。

    key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。在不损失精确型的情况下,长度越短越好,key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据定义计算而得,不是通过表内检索出的。

    ref:显示索引的哪一列被使用了,如果可能的话,是一个常数,哪些列或者常量被用于查找索引列上的值。只有当type为ref的时候,ref这列才会有值。

    rows:根据表统计信息以及索引选用情况,大致估算出找到所需的记录所需要读取的行数,所以越小越好。可以用来查询sql的读取行数。

    extra:包含不适合在其它列中显示但十分重要的额外信息。

    四、哪些情况适合/需要创建索引

    4.1、以下情况适合/需要创建索引:

    1)主键(自动建立唯一索引)

    2)外键

    3)查询中与其它表关联的字段

    4)频繁作为查询条件的字段

    5)查询中统计或者分组的字段

    6)查询中排序的字段

    五、哪些情况不适合创建索引

    5.1、以下情况不适合创建索引:

    1)频繁更新的字段,因为每次更新不单单更新了记录还会更新索引。

    2)WHERE条件里用不到的字段

    3)表记录太少

    4)经常增删改的表

    5)如果某个数据列包含太多重复的内容(如性别,为它建立索引就没有太大的实际效果。)

  • 相关阅读:
    css中优先级与层叠
    微服务通过feign.RequestInterceptor传递参数
    maven详解
    Java8新特性interface中的static方法和default方法
    设计模式六大原则---转
    MySQL主从复制作用和原理
    Mysql Binlog三种格式详细介绍
    分布式主键生成逻辑总结--转
    java幂等性的解决方案
    spring事务的传播机制新解
  • 原文地址:https://www.cnblogs.com/atomy/p/13640246.html
Copyright © 2020-2023  润新知