• MySQL的索引


    MySQL索引

      索引:是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。其可以加快数据操作,但会使数据操作变慢;应该构建在被用作查询条件的字段上。

      MySQL中的索引类型:

        1.B+TREE索引

          Balance Tree(平衡树),是一种数据结构,由于其综合效率较高,显著减少定位记录时所经历的中间过程,从而加快存取速度。

          可用来查询的类型:

            (1)全值匹配

            (2)匹配最左前缀

            (3)匹配列前缀

            (4)匹配范围值

          但也有一些限制:

            (1)必须从最左侧开始查询

            (2)不能跳过某一索引

            (3)如果查询中某个列为范围查询,那么其右侧的列都无法再使用索引优化查询;(精确范围放左侧,范围查询放右侧即可;反之,右侧将无法再使用索引查询。)

        2.Hash索引     

          基于哈希表,适合精确匹配索引中的所有列;但只有Memory存储引擎支持显式hash索引;不支持模糊匹配,不适用于顺序查询;

        3.空间索引(R-TREE):

          在MySQL中仅MyISAM存储引擎支持空间索引;

        4.全文索引(FULLTEXT):

          在文本中查找关键词,类似于搜索引擎;

      MySQL中索引的管理: 

    /*创建索引*/
    CREATE INDEX index_name ON tbl_name(col1,col2,...);
    
    /*删除索引*/
    DROP [ONLINE|OFFLINE] INDEX index_name ON tbl_name;
    
    /*查看索引*/
    SHOW {INDEX|INDEXES|KEYS} {FORM|IN} tbl_name [{FROM|IN} db_name] [WHERE expression];

      如何分析索引有效性?

        EXPLAIN SELECT Clause...

      其输出结果为:

      各项指标的解释如下:

        id:当前查询中SELECT语句的编号

        select_type:查询类型

    /*相关的类型*/
    
    SIMPLE  //简单查询
    SUBQUERY  //简单子查询
    DERIVED  //用于FROM的子查询;
    UNION  //UNION语句中UNION后的第一个SELECT语句
    UNION RESULT  //UNION之后的总体临时虚表

        table:查询关联到的表

        type:关联类型,即MySQL查询表的方式

    /*相关的类型*/
    
    ALL  //全表扫描
    index  //根据索引的次序进行全表扫描;如果在Extra中出现了“USING index”则表示使用了覆盖索引,而非全表扫描
    range  //有限制的根据索引实现的范围扫描
    ref  //根据索引返回表中匹配某单个值的所有行
    eq_ref  //仅返回一行,但需要额外与某个参考值作比较
    const,system  //直接返回单个行;此类型为最佳查询;

        possible_keys:查询中可能会用到的索引

        key:查询中使用的索引

        key_len:使用索引的字节数

        ref:在利用key所表示的索引完成查询时所有的列或某常量值

        row:MySQL找到目标所读取的行数

        Extra:额外信息

    /*额外信息*/
    
    Using index  //MySQL将会使用覆盖索引,以避免访问表;
    Using where  //MySQL服务器将在存储引擎检索后,再进行一次过滤;
    Using temporary  //MySQL对结果排序时会使用临时表;
    Using filesort  //对结果使用一个外部索引排序(性能低下);

        

  • 相关阅读:
    【读书笔记】iOS-UDID
    【读书笔记】iOS-优化内存
    【读书笔记】iOS-处理内存警告
    【读书笔记】iOS-方法声明
    【读书笔记】iOS-属性
    【读书笔记】iOS-强类型与弱类型
    【读书笔记】iOS-Objective-C编程
    【读书笔记】iOS-Interface Builder
    【读书笔记】iOS-开发者证书
    【读书笔记】iOS-成为一名开发者
  • 原文地址:https://www.cnblogs.com/trymybesttoimp/p/6265520.html
Copyright © 2020-2023  润新知