zoukankan      html  css  js  c++  java
  • 索引知识点补充

    一、索引中包含like关键字 

    • 在索引列上使用like该列会不会使用到索引?
    • 在联合索引上前面索引字段使用like之后后面的列上会不会用到索引?
    如果索引字段上使用 like '%xxx',这种不会用到索引,后面的索引也不会用到,如果格式为 like 'xxx%',这种可以用到索引,而且不影响后面的索引使用。
    对于某些订单号比较长的,在使用的时候可能会反转一下用到索引,因为输入单号的后几位比较符合使用习惯。反转的目的就是可以用到索引。
    举例如下:
     对于user表,索引列为(name,age),依次执行下面的语句:
    1、like 'xxx%'格式:可以用到索引
    explain select * from user where name like 'ab%'
    执行结果如下:使用到了索引
     
    后面如果有其它索引也是没有问题的
    explain select * from user where name like 'zz%'and age = 1;
     2、like '%xxx'格式:不会用到索引
    explain select * from user where name like '%zz';
    后面如果有其它索引也不会用到
    explain select * from user where name like '%zz'and age = 1;
    执行结果如下:没有用到索引

    二、优化sql语句的过程

    • profile的使用(profile:个人资料)
    1、查看profile是否打开
    show variables like '%profil%';
    显示如下:


     OFF 为未打开。使用下面语句打开:
    set profiling = 1;
    2.、执行sql语句之后,执行查询语句:
    show profile for query 1;
    显示如下:
    其中:红框里面的比较重要,左面是执行中的一个节点,右面是该过程耗时
    含义
    optimizing 优化
    statistics 统计
    preparing 准备
    executing 执行
    Sending data 发送数据
    具体要分析的东西等碰到了详细学习。

    三、MySQL如何执行关联查询

    对于下面的连接查询,MySQL执行步骤
    SELECT A.a,B.b FROM A INNER JOIN B ON A.c = B.c;
            MySQL对任何关联查询都执行嵌套循环关联操作,即MySQL先在一个表中循环取出单条数据,然后再嵌套到下一个表中寻找匹配的行,依次下去,直到找到所有表中匹配的行为止。然后根据各个表匹配的行,返回查询中需要的各个列。
            结合上面的例子,执行步骤如下:(假设优化器优化的关联顺序为A,B)
    1. 执行SQL语句:SELECT A.a,A.c FROM A;查出来的结果不妨记为:A_rows
    2. 执行SQL语句:SELECT B.b FROM B WHERE B.c = A_rows.c
    3. 然后返回查询中的各个列。

    四、索引经验总结 

    1、如果查询的数据量比较大,MySQL可能会优化为不用索引,也就是说,查询的数据量过多时,不适用用索引。
    2、什么情况下使用全表扫描要比使用索引快??
           查询结果的记录数量小于表中记录一定比例的时候。这个主要是由于索引扫描后要利用索引中的指针去逐一访问记录,假设每个记录都使用索引访问,则读取磁盘的次数是查询包含的记录数T,而如果表扫描则读取磁盘的次数是存储记录的块数B,如果T>B 的话索引就没有优势了。对于大多数数据库来说,这个比例是10%(oracle,postgresql等),即先对结果数量估算,如果小于这个比例用索引,大于的话即直接表扫描。
  • 相关阅读:
    自定义类型中结构体、枚举等,结构体内存对齐相关要点总结
    可变参数模拟printf()函数实现一个my_print()函数以及调用可变参数需注意的陷阱
    一些关于memcpy memmove函数的区别,和模拟实现
    浅谈 数组指针 指针数组 函数指针 函数指针数组... 以及它们之间区别。
    C语 三子棋小游戏
    5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
    stm32移植ds18b20时出现的问题
    自己实现strcmp
    C语言新手写扫雷攻略3
    C语言新手写扫雷攻略2
  • 原文地址:https://www.cnblogs.com/uodut/p/7071142.html
Copyright © 2011-2022 走看看