查询语句在本质上是一种声明式的语法,具体执行方式有很多种。

  1. const
  2. ref
  3. ref_or_null
  4. range
  5. index
  6. all

有的查询可以使用索引合并的方式利用多个索引完后查询。有三种。

  1. Intersection索引合并
  2. Union索引合并
  3. Sort-Union索引合并

1.const
有时通过主键列或者唯一二级索引列与常数的等值比较来定位一条记录时,速度飞快,把这种访问方法定位为const.若主键或者唯一二级索引是多个列组成,只有索引列的每一个列都与常数进行等值比较时,这个const访问方法才有效。
对于唯一二级索引来说,在查询列为NULL值时,比如:

select * from single_table where key is null ;

因为唯一二级索引并不限制NULL的数量,所以上述语句可能会访问到多条记录,上述情况不可以使用const方法来执行。

2. ref
由于普通二级索引并不限制索引列的唯一性,所以在某个扫描区间中的二级索引记录可能有多条,此时使用二级索引执行查询的代价就取决于该扫描区间中的记录条数。我们把这种“搜索条件为耳机索引列的与常数进行等值比较,形成的扫描区间为单点扫描区间,采用二级索引来执行查询”的访问方法称为ref

3.ref_or_null
有时,我们不仅想找出某个二级索引列的值等于某个常数的记录,还想把该列中的值中为NULL的记录也找出来。这种查询所使用的方法就是ref_or_nullref_or_null访问方法只是比ref访问方法多扫描了一些值为NULL的二级索引记录。

4.range
前面提到的都是索引列与某一个常数进行等值比较。在面对比较复杂的查询时,如下面这个查询:

select * from single_table where key1 in (1438,6328) or (key1 >= 38 and key2 <=79) ;

上面查询语句对应的扫描区间是[1438,1438][6328,6328][38,79]。“使用索引执行查询时,对应的扫描区间为若干个单点或者范围扫描区间”的访问方法称为range

仅包含一个单点扫描区间和扫描区间为(-∞,+∞)的访问方法不能称为range

5.index
在使用联合索引时,联合索引字段包含查询列表字段,并且联合索引的字段又包含搜索条件中的字段,这个过程不用执行回表操作,直接扫描二级索引记录比直接扫描全部的聚簇索引的成本要小很多。这种扫描方法称为index访问方法。

6.all
对于直接扫描全部的聚簇索引记录的方法称为all访问方法。

索引合并(Mysql为多个索引形成扫描空间)
7.Intersection索引合并
当一个搜索条件中涉及多个索引。Intersection索引合并指的就是从不同索引中扫描到的记录的id值取交集,只为这些id执行回表操作。

8.Union索引合并
当一个搜索条件中涉及多个索引。Union索引合并指的就是从不同索引中扫描到的记录的id值取并集,根据二级索记录的id值在两者的结果中去重,根据去重后id执行回表操作。

9.Sort-Union索引合并
Sort-Union索引合并只比Union索引合并多了一步对二级索引记录的主键值进行排序的过程。

《Mysql是怎样运行的》读书笔记之单表访问相关推荐

  1. Mysql是怎么运行的读书笔记

    前言 第1章 装作自己是个小白–初识Mysql Mysql分为客户端和服务端,客户端有很多种比如:手机 App.桌面端的软件或者网页版的微信.客户端发送请求,服务端处理请求,服务端将处理结果发送客户端 ...

  2. mysql必知必会读书笔记就——联结表、高级联结

    vendor表: products表: orderitems表: customers表: orders表: 一.联结表:联结表是一种机制,用来在一条select语句中关联表,因此称为联结表.联结在运行 ...

  3. 《MYSQL是怎样运行的》笔记|配置文件|系统变量|字符集|InnoDB存储结构|数据页结构|索引结构与使用|数据目录|表空间|连表原理|查询优化|BufferPool|事务|redo与undo|锁

    <MYSQL是怎样运行的>笔记 前记: 历时15天,笔记+看书.完成于2022.2.5. 本书是讲具体的数据库实现,而数据库系统概念见:https://blog.csdn.net/qq_4 ...

  4. 大数据之路读书笔记-11事实表设计

    大数据之路读书笔记-11事实表设计 文章目录 大数据之路读书笔记-11事实表设计 11.1 事实表基础 11.1.1 事实表特性 11.1.2 事实表设计原则 11.1.3 事实表设计方法 11.2 ...

  5. 一文带你了解MySQL之单表访问方法

    前言 对于我们这些MySQL的使用者来说,MySQL其实就是一个软件,平时用的最多的就是查询功能.DBA时不时丢过来一些慢查询语句让优化,我们如果连查询是怎么执行的都不清楚还优化什么,所以是时候掌握真 ...

  6. .net框架读书笔记---类型成员及其访问限定(一)

    接上一篇.net框架读书笔记---通用对象操作(三),开始学习类型以及每个类型的所有实例都具有的一组通用操作. 一.类型成员 一个类型可以定义零个或多个以下成员 常数,常数是一个表示恒定不变的数值的符 ...

  7. 2012-2-24 《数据结构》读书笔记2 线性表

    "软件只不过是人的思想产物,软件可能是人能造出来的最复杂的实体"这是昨天晚上UML(统一建模语言)老师的一句话,也更加坚定了我学习软件的决心,真的有这么复杂么,其实还是自己不够用心 ...

  8. CentOS6.4 配置mysql服务器启动多个端口,同步单表数据

    ============================================================ ====多端口启动==== ========================= ...

  9. mysql数据库查询关键字级别_MySQL数据库之单表查询中关键字的执行顺序

    MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 select distinct from where group by having order by limit 2 执行顺序 from ...

最新文章

  1. Java中getResourceAsStream的用法
  2. mysql_connect() 不支持 请检查 mysql 模块是否正确加载
  3. 四位先行进位电路逻辑表达式_如何用基本的逻辑门设计32bit的超前进位加法器?...
  4. nginx 安装及使用命令
  5. Mysql生产指定时间段随机日期函数
  6. [转载]我的WafBypass之道(upload篇)
  7. 好东西!适合电商促销C4D场景模型海报素材!
  8. 贵阳计算机网络技术学院录取分数线,贵阳职业技术学院录取分数线2021是多少分(附历年录取分数线)...
  9. OpenCV 20 年,首款开源软硬一体的 OAK 套件来了!
  10. (C++)虚函数表解析(转)
  11. 如何直观理解拉格朗日乘子法与KKT条件
  12. python爬虫之模拟登陆csdn
  13. 【机器学习】:如何对你的数据进行分类?
  14. 常用软件分类运维或个人收藏软件必备,及文件夹打包下载
  15. STM32智能家居系统设计(门禁、人体感应、GSM远程控制)
  16. <img> 的 title 和 alt 有什么区别
  17. 一起学些LLVM(五): 学习lli/vmir
  18. Template /template/pimple/a.ftl not found
  19. 电阻何时取得最大功率
  20. centos怎么把计算机调到桌面,CentOS下命令行和桌面模式的切换方法

热门文章

  1. pojo层、dao层、service层、controller层的作用
  2. ABAP AMDP数据库存储过程(数据源)
  3. Android 性能监测工具,优化内存、卡顿、耗电、APK的方法
  4. Android仿IOS解锁密码界面-自定义view系列(6)
  5. 汇编语言SAL SHL的比较
  6. z-index 无效解决方法
  7. 插画怎么平涂?平涂和厚涂有什么区别么?
  8. 分享一款实用脑电分析软件,模拟非侵入性脑刺激
  9. Mathematica学习笔记
  10. 什么是全景图?怎么做全景图?