mysql学习笔记6

64 阅读3分钟

单表查询

在mysql中,查询的方法可以大体分为两种:

  1. 全表扫描查询,遍历全表,把符合要求的数据返回
  2. 通过索引查询。先通过索引查找出主键值,再回表查询出全部数据。

因为索引可以分为很多种类,所以通过索引查询就可以分为很多类:

  • 针对主键或唯一二级索引的等值查询
  • 针对普通二级索引的等值查询
  • 针对索引列的范围查询
  • 直接扫描整个索引

MySQL 执行查询语句的方式称之为 访问方法 或者 访问类型,其具体内容如下:

  1. const。通过主键或唯一一二级索引查询,直接定位到一行时是这个类型。
  2. ref。非唯一的二级索引查询,查询的内容是与某值做等值比较。
  3. ref_or_null。与ref相似,但多了对空值的查询。
  4. range。使用索引来做范围查询。比如BETWEEN><>=<=等比较运算符。
  5. index。通过读取索引就能完成查询要求,常见于索引覆盖的情况。
  6. all。全表扫描。

注意

1、 范围查询,要明确查询范围

在使用范围查询的时候我们的查询条件可以会有多个字段。比如说:a > 200 and b <10 and c <> 30 and a like %10 等。在分析使用索引确定出来的索引查询范围的时候我们可以把不相干的查询条件或者无法使用索引的查询条件视为TRUE,等通过索引确定好范围后再回表筛选剩下的数据。

具体来说,我们要使用a的索引来查询,那么b<10,c<>30 a like %10都不会使用索引a,那么条件就变成了a >200 and true and true and true 最后变成了 a > 200 这种查询条件。

注意and和or的区别

2、索引合并

(1)索引并集 (Intersection合并)

索引并集就是我们的查询条件有两个二级索引,mysql在分析后选择分别从两个索引中按筛选条件查询,将两个结果进行并集操作后再回表查询。虽然多进行一个二级索引的查询会影响效率,但可以减少回表的次数。 使用到的情况:

  1. 二级索引列是等值匹配的情况,对于联合索引来说,在联合索引中的每个列都必须等值匹配,不能 出现只出现匹配部分列的情况。
  2. 主键列的查询条件可以是范围匹配。

第一个条件可以保证查询出的结果即主键值是有序的。

索引并集可以通过建立联合索引的形式更快地实现我们想要的结果。

(2)索引交集 (Union合并)

和并集类似,一个做并集操作,一个做交集操作。 其使用到的情况除了上面两种情况外还有:使用到了索引合并出来的条件。

(3)Sort-Union合并

这种情况会先将通过二级索引查询到的主键值进行排序,在进行交集合并。