• 27 mysql 组合索引 的存储以及使用


    前言

    这里来看一下 mysql 中索引的 增删改查 

    查询在前面的系列文章中都有使用到 

    这里 来看一下 增删改 的相关实现 

    索引记录 和 数据记录 的处理方式是一致的 

    这里来看一下 组合索引 的相关, 以及 特性 

     

     

    组合索引的存储以及使用

    创建数据表如下, 除了主键之外, 创建了一个 field1, field2 的一个联合索引 

    1. CREATE TABLE `tz_test_02` (
    2. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    3. `field1` varchar(12) DEFAULT NULL,
    4. `field2` varchar(16) DEFAULT NULL,
    5. `field3` varchar(24) DEFAULT NULL,
    6. PRIMARY KEY (`id`) USING BTREE,
    7. KEY `idx_composite` (`field1`,`field2`) USING BTREE
    8. ) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8

     

    将 tz_test 的数据 抽取到 tz_test_02, 然后执行 sql, “update tz_test_02 set field3 = field1;”

    66dc0382693c4374aa9fd73a958e73fd.png

     

     

    执行 sql 如下, “select * from tz_test_02 where field1 = 'field33';”

    扫描的记录如下, 可以看到是 走的索引

    “field33” 表示的是 field1, “33” 表示的是 field2, 再之后为索引记录映射的主键记录信息 

    72f0b0f1eaad4e719695202288ff83f9.png

     

    索引记录信息如下  

    ff59728baabf40e8a08b12262c3ee562.png

     

    ”explpain select * from tz_test_02 where field1 = 'field33';” 结果如下 

    9cfcadbc774d4800b05a3df09b127615.png

     

    执行 sql 如下, “select * from tz_test_02 where field2 = 33;”

    扫描的记录如下, 可以看到是 走的所有的记录

    5a7a8cda22f0481ba2119d25a07a4e33.png

     

    因为索引的存储是按照顺序存储的 field1,field2 -> id

    因此, 查询 field1 的记录可以走索引, 查询 field1 + field2 的记录可以走索引 

    这个就是 联合索引的左前缀匹配规则的道理

     

    ”explpain select * from tz_test_02 where field2 = 33;” 结果如下 

    3cdda1bc4e6241979b36f484bb49c400.png

     

     

     

     

     

  • 相关阅读:
    echarts折线图修改特定点的颜色
    C++ DAY3
    Glide原理
    关于奇偶检验为什么用归约异或
    假期第一课
    基于ROS的机器人模型建立及3D仿真【物理/机械意义】
    Python---字符串的修改方法---replace()替换
    VisualStudio 远程Debug
    【SSM框架】Mybatis详解05(源码自取)增加五大功能
    随笔(如何提高系统的响应速度)
  • 原文地址:https://blog.csdn.net/u011039332/article/details/131135542