索引知识点补充

一、索引中包含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等),即先对结果数量估算,如果小于这个比例用索引,大于的话即直接表扫描。

时间: 2024-12-28 11:40:26

索引知识点补充的相关文章

索引知识点归纳总结

1. 聚集索引 聚集索引(clustered index)就是按照每张表的主键构造一棵B+树,同时叶子节点中存放的为整张表的行记录数据.也将聚集索引的叶子节点称为数据页.同B+树数据结构一样,每个数据页都通过一个双向链表进行链接. 由于实际的数据页只能按照一棵B+树进行排序,因此每张表只能拥有一个聚集索引.在多数情况下,查询优化倾向于采用聚集索引.因为聚集索引能够在B+树索引的叶子节点直接找到数据.另外,由于定义了数据的逻辑顺序,聚集索引能够特别快的访问针对范围的查询. 聚集索引的存储并不是物理

IE6下的怪异解析知识点补充

转载请注明出处:HTMl5自由者       IE6下的怪异解析知识点补充,布布扣,bubuko.com

第三方框架SDWebImage 知识点补充

1.SDWebImage相关知识点补充 01.SDWebImage接收到内存警告的时候如何处理?采用监听系统警告通知的方式处理,接收到警告后清空缓存 02.SDWebImage队列最大并发数为6 03.SDWebImage内部设置下载图片超时时间为15m 04.SDWebImage图片下载操作使用了NSURLConnection类发送网络请求实现 05.SDWebImage内部使用NSCache类来进行缓存处理 06.SDWebImage内部如何判断图片类型?判断该图片二进制数据的第一个字节 0

面向对象:继承,知识点补充

面向对象: ? 三大特性 : 继承 封装 多态 什么是继承: 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类. python中类的继承分为:单继承和多继承. ? 在开发程序的过程中,如果我们定义了一个类A,然后又想新建立另外一个类B,但是类B的大部分内容与类A的相同时,我们不可能从头开始写一个类B,这就用到了类的继承的概念. 通过继承的方式新建类B,让B继承A,B会'遗传'A的所有属性(数据属性和函数属性),实现代码重

数据库----索引与补充

索引与补充 一, 什么是索引 为什么要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重.说起加速查询,就不得不提到索引了. 什么是索引? 索引在MySQL中也叫是一种"键",是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要.索引优化应该是对查询性能优化最

07.Pythonset集合,深浅拷?以及部分知识点补充

?. 基础数据类型补充 ?先关于int和str在之前的学习中已经讲了80%以上了. 所以剩下的??看?看就可以了. 我们补充给?个字符串基本操作 列表: 循环删除列表中的每?个元素 分析原因: for的运?过程. 会有?个指针来记录当前循环的元素是哪?个, ?开始这个指针指向第0 个. 然后获取到第0个元素. 紧接着删除第0个. 这个时候. 原来是第?个的元素会?动的变成 第0个. 然后指针向后移动?次, 指向1元素. 这时原来的1已经变成了0, 也就不会被删除了. ?pop删除试试看: 经过分

Mysql学习笔记(十)存储过程与函数 + 知识点补充(having与where的区别)

学习内容:存储程序与函数...这一章学的我是云里雾里的... 1.存储过程...   Mysql存储过程是从mysql 5.0开始增加的一个新功能.存储过程的优点其实有很多,不过我觉得存储过程最重要的优点就是实现了SQL代码的封装,那么我们为什么需要封装SQL语句呢?原因就是当我们在面对一个庞大的数据库的时候,当我们使用外部程序去访问数据库的时候...我们总不能在外部程序中内嵌很多的SQL语句吧...那样执行的效率不高,并且也不容易维护...因此存储过程将我们的操作进行封装,当我们需要对其进行操

day-3 小知识点补充 编码 集合 文件及函数初识

1. 小知识点的补充 ==数值比较 is比较两边的内存地址 id获取内存地址 小数据池str int,公用一个内存,目的节省内存空间. 要求:A. int范围是-5到256,指向一个地址空间 B. str: 1.不能含有特殊字符 2.单个元素乘以数字不能超过21 2. 编码 字符:看到内容的最小单位.比如: abc:a一个字符 中国:中 Ascii码:1个字节,字母,数字,特殊字符 Unicode:也称万国码,最开始2个字节表示一个字符,后升级到4个字节表示一个字节 Utf-8:最后用8位表示一

知识点补充 set 深浅拷贝

一 对前面知识点的补充 1.str中的join()方法是将列表转换成字符串 lst = ["韩雪","赵丽颖","黄渤","李连杰"] print("_".join(lst)) # 韩雪_赵丽颖_黄渤_李连杰 将每个元素用_进行拼接 s = "马化腾" print("-".join(s)) # 马-化-腾 2.把字符串转换成列表  用split() ss = &quo