zoukankan      html  css  js  c++  java
  • 0115关于索引认识

    -- 关于索引一点理解
    1从整体理解联合索引,ORDER BY以及GROUP BY之间的过程
    -- 改语句很有代表性,自己分析,理解为什么
    CREATE TABLE t6(
    c1 CHAR(1) NOT NULL DEFAULT '',
    c2 CHAR(1) NOT NULL DEFAULT '',
    c3 CHAR(1) NOT NULL DEFAULT '',
    c4 CHAR(1) NOT NULL DEFAULT '',
    c5 CHAR(1) NOT NULL DEFAULT '',
    KEY(c1,c2,c3,c4)
    )ENGINE INNODB CHARSET utf8;

    INSERT INTO t6 VALUES('a','b','c','d','e');

    EXPLAIN
    SELECT * FROM t6 WHERE c1='a' AND c2='b' AND c4>'a' AND c3='c';

    EXPLAIN
    SELECT * FROM t6 WHERE c1='a' AND c2='b' AND c4='a' ORDER BY c3;

    EXPLAIN
    SELECT * FROM t6 WHERE c1='a' AND c2='b' AND c4='a' ORDER BY c5;

    EXPLAIN
    SELECT * FROM t6 WHERE c1='a' AND c5='a' ORDER BY c2,c3;

    EXPLAIN
    SELECT * FROM t6 WHERE c1='a' AND c5='a' ORDER BY c3,c2;

    EXPLAIN
    SELECT * FROM t6 WHERE c1='a' AND c2='b' AND c5='a' ORDER BY c2,c3;

    EXPLAIN
    SELECT * FROM t6 WHERE c1='a' AND c2='b' AND c5='a' ORDER BY c3,c2;-- [改写为order by c3,'b'],故直接修改为order by c3,语句写的冗余

    EXPLAIN
    SELECT * FROM t6 WHERE c1='a' AND c4='d' GROUP BY c2,c3;

    EXPLAIN
    SELECT * FROM t6 WHERE c1='a' AND c4='d' GROUP BY c3,c2;

    -- 有时候使用了索引但是不会计入到key_len的长度当中,但是我们发现他们区别在extra中 使用索引的using where,但是没有使用索引的using tempary;using filsort

    理解图片

    2关于EXPLAIN中ROWS自己的一点认识
    -- 需要扫描的行数,代表必须
    EXPLAIN
    SELECT * FROM ta WHERE rid1=429 AND rid2=36

    SELECT * FROM ta WHERE rid2=36-- 12
    -- 相当于先通过索引找到12行符合条件的语句,所以扫描行数肯定为12,然后回表使用where进行过滤,得到最终的6条
    -- 所以建立更好的索引,可以减少扫描行数,索引功能作用大大的

    一条SQL语句的执行过程

    3关于mysql是如何进行group by的分析结构

    所以建立有效的索引,可以避免Using tempary;Using filesort;

  • 相关阅读:
    恭喜你,你毕业了
    用VB.Net2008制作安装程序详细步骤(菜鸟级别,高手勿进)
    交通标志结构计算软件开发进程
    【工作笔记002】在TC中建立应用于出行分布的阻抗矩阵(最短路矩阵)
    VB.Net 2008 引用Excel12
    开博,开播。
    【推荐】万物兴歇——衰老与寿命的演化
    一张交叉口渠划的彩色平面图
    萦绕在头脑中的思路_我的编程梦们 【更新至2010.06.03】
    8月份的回顾
  • 原文地址:https://www.cnblogs.com/qcfeng/p/6288081.html
Copyright © 2011-2022 走看看