zoukankan      html  css  js  c++  java
  • MySQL索引最左匹配原则

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11609103.html

    创建一个测试表

     1 CREATE TABLE `test` (
     2   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
     3   `a` varchar(32) NOT NULL,
     4   `b` varchar(32) NOT NULL,
     5   `c` varchar(64) NOT NULL,
     6   `d` varchar(128) NOT NULL,
     7   `e` varchar(256) NOT NULL,
     8   `create_time` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),  
     9   `update_time` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), 
    10   PRIMARY KEY (`id`)
    11 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    插入数据

     1 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e');
     2 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e');
     3 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e');
     4 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e');
     5 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e');
     6 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e');
     7 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e');
     8 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e');
     9 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e');
    10 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e');

    查看索引

    1 show index from test;

    查看执行计划

    1 explain select * from test where id = "1";

    1 explain select * from test where a = "1";

    1 explain select * from test where b = "1";

    1 explain select * from test where a = "1" and b = "1";

    创建索引(a和b的联合索引)

    1 create index idx_a_b on test(a, b);

    查看索引

    1 show index from test;

    查看执行计划

    1 explain select * from test where a = "1";

    1 explain select * from test where b = "1";

    1 explain select * from test where a = "1" and b = "1";

    创建索引(b的索引)

    1 create index idx_b on test(b);

    查看索引

    1 show index from test;

    查看执行计划

    1 explain select * from test where a = "1";

    1 explain select * from test where b = "1";

    1 explain select * from test where a = "1" and b = "1";

    删除索引

    1 drop index idx_a_b on test;
    2 drop index idx_b on test;

    删除索引后,创建a, b, c 3个字段的联合索引

    1 create index idx_a_b_c on test(a, b, c);

    查看如下语句的执行计划

     1 -- ref
     2 explain select * from test where a = "1";
     3 -- all 扫全表
     4 explain select * from test where b = "1";
     5 -- all 扫全表
     6 explain select * from test where c = "1";
     7 -- ref
     8 explain select * from test where a = "1" and b = "1" and c = "1";
     9 -- ref
    10 explain select * from test where a = "1" and b = "1";
    11 -- ref
    12 explain select * from test where a = "1" and c = "1"
    13 -- all 扫全表
    14 explain select * from test where b = "1" and c = "1"



      

  • 相关阅读:
    C#通过正则表达式统计词频的一个方法
    本地服务器远程连接其它数据库
    拼字符串成为时间,和两个计算时间点的中间值
    删除文件夹里的图片,打印删除日志
    行转列SQL语句
    加载出一个有层次的下拉框
    查询结果列传行
    【Java&Python双管齐下复健002】回文数和反转数
    【Java&Python双管齐下复健001】冒泡排序和质数判断
    【LeetCode记录】初级算法:数组之删除排序数组中的重复项
  • 原文地址:https://www.cnblogs.com/agilestyle/p/11609103.html
Copyright © 2011-2022 走看看