博客
关于我
MySQL高级-索引
阅读量:790 次
发布时间:2023-02-13

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

1. 索引概述

索引是MySQL高效获取数据的重要工具,它通过维护特定查找算法的数据结构,帮助快速定位所需数据。索引可以看作是一种有序的数据结构,类似于书籍的目录,能够显著降低数据检索的时间复杂度。

2. 索引优势与劣势

优势

  • 索引类似于书籍的目录,显著提高数据检索效率,降低数据库IO成本。
  • 索引列可以对数据进行排序,降低数据排序的成本,减少CPU消耗。
  • 劣势

  • 索引本身占用存储空间,类似于一张表,保存主键与索引字段信息。
  • 索引虽然提高了查询效率,但在数据更新(如INSERT、UPDATE、DELETE)时会增加额外负担,因为需要维护索引文件的更新信息。
  • 3. 索引结构

    索引在MySQL的存储引擎层实现,具体类型和功能因存储引擎而异。MySQL支持以下四种索引类型:

    • BTREE索引:最常见的索引类型,支持大部分查询。
    • HASH索引:仅适用于Memory引擎,简单场景下使用。
    • R-tree索引:用于空间数据类型,如地理坐标,MyISAM引擎特性。
    • Full-text索引:用于全文检索,InnoDB从MySQL5.6版本支持。

    4. B+树结构

    B+树是B树的变种,主要特点:

  • n叉B+树最多含有n个关键字,而B树最多含有n-1个。
  • B+树的叶子节点保存所有关键字信息,按顺序排列。
  • 非叶子节点作为关键字的索引部分。
  • B+树的查询效率优于B树,尤其适合范围查询。

    5. MySQL中的B+树

    MySQL优化了传统B+树,增加叶子节点间的顺序指针,提升区间访问性能。这一改进使得范围查询更加高效。

    6. 索引分类

  • 单值索引:索引仅包含单一列。
  • 唯一索引:索引列值必须唯一,允许空值。
  • 复合索引:索引包含多列信息。
  • 复合索引的使用可以提升查询效率,尤其是在Where子句包含多个字段时。

    7. 索引语法

    索引创建可在表创建时同时添加,或随时通过ALTER命令添加。以下是常用命令示例:

    • 创建普通索引:

      CREATE INDEX idx_city_name ON city(city_name);
    • 删除索引:

      DROP INDEX idx_city_name ON city;
    • 修改索引:

      ALTER TABLE city ADD UNIQUE INDEX idx_city_name(city_name);

    8. 索引设计原则

  • 对频繁查询的表建立索引。
  • 从Where子句中选择高频和过滤效果好的字段作为索引。
  • 唯一索引提高区分度,提升索引效率。
  • 避免索引过多,尤其是对DML操作频繁的表。
  • 使用短索引,提升I/O效率。
  • 利用最左前缀,创建复合索引以提升查询效率。
  • 通过遵循这些原则,可以在提升查询性能的同时,减少索引维护的开销。

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

    你可能感兴趣的文章
    Mysql:SQL性能分析
    查看>>
    mysql:SQL按时间查询方法总结
    查看>>
    MySQL:什么样的字段适合加索引?什么样的字段不适合加索引
    查看>>
    MySQL:判断逗号分隔的字符串中是否包含某个字符串
    查看>>
    MySQL:某个ip连接mysql失败次数过多,导致ip锁定
    查看>>
    MySQL:索引失效场景总结
    查看>>
    Mysql:避免重复的插入数据方法汇总
    查看>>
    MyS中的IF
    查看>>
    M_Map工具箱简介及地理图形绘制
    查看>>
    m_Orchestrate learning system---二十二、html代码如何变的容易
    查看>>
    M×N 形状 numpy.ndarray 的滑动窗口
    查看>>
    m个苹果放入n个盘子问题
    查看>>
    n = 3 , while n , continue
    查看>>
    n 叉树后序遍历转换为链表问题的深入探讨
    查看>>
    N!
    查看>>
    N-Gram的基本原理
    查看>>
    n1 c语言程序,全国青少年软件编程等级考试C语言经典程序题10道七
    查看>>
    Nacos Client常用配置
    查看>>
    nacos config
    查看>>
    Nacos Config--服务配置
    查看>>