MySQL 单表访问

MySQL执行单表查询

  1.访问方法:

          Const

        MySQL直接利用主键值在聚簇索引中定位对应的用户记录.并且唯一的二级索引也可以在常数时间内定位到一条记录. 这种const访问方法只能在主键列或者唯一二级索引与一个常数进行等值比较才有效.

         ref

        普通的二级索引列与常数进行等值比较,会形成一个单点扫描区间.这种方法方法被称为ref.采用二级索引来执行查询时,如果无法使用索引下推,则每获取一条二级索引记录,就会立刻对其执行回表操作.

  • 二级索引列允许存储NULL值,无论是普通的二级索引,还是唯一二级索引,它们的索引列并不限制NULL值的数量,所以在执行包含 "KEY IS NULL" 形式的搜索条件查询时,最多使用ref方法
  • 对于索引列中包含多个列的二级索引来说,只要最左边连续的列是与常数进行等值比较就可以使用ref方法.

       ref_or_null

        如果想找出某个二级索引类的值等于某个常数的记录,而且还想把该列中的值为NULL的记录也找出来. 如: SELECT * from table where key1 = 1 OR key1 IS NULL .  则会生成两个扫描区间 [NULL , NULL] 以及 [1,1].只是比上面的多了一个[NULL , NULL]的扫描区间.  值为NULL的记录会被放在索引的最左边.

       range

        上面的三种访问方法都是索引列等值查询时的情况,当执行的是索引列非等值查询会生成非单点的扫描区间,这种访问方法被称为range.

        index

一种比较特殊的情况 如: 对(key1 , key2 , key3) 建一个联合索引 idx_key_part. 然后下面的查询语句:

        SELECT key1 , key2 , key3 from table where key2 = 'a'

        key2并不是联合索引idx_key_part. 最左侧的列,所以无法形成合适的扫描区间来减少需要扫描的记录数量.但是这个查询符合下面的两个条件:

  • 它查询的列刚好是联合索引的三个列
  • 搜索条件中的key2列也是联合索引中的列

        对于这种情况可以直接便利联合索引的所有二级索引记录,针对获取到的每一条二级索引记录,都判断key2 = 'a' 是否成立.如果成立,则读取 key1 , key3的值,发送给客户端.虽然它对应的扫描区间是(-∞,+∞) 但是,二级索引的记录只需要存放索引列和主键 , 记录要比聚簇索引小的多,而且这个过程是不需要回表操作的.

        对于上面这种情况,扫描全部二级索引记录的访问方法称为index方法.

   2.索引合并

        Intersection 索引合并

SELECT * from table where key1 = 'a' AND key3 = 'b' (key1 , key3均为索引列)

  • 如果使用 key1列 , 则会生成 ['a','a']的扫描区间.对于获取到的每一条记录,根据主键 回表查询获取到完整的用户记录 , 在判断 key3 是否满足等于 'b'. 
  • 只是用 key3列,和上面相同
  • 可以同时使用key1 和 key3 两个索引列执行查询. 即 在key1的索引中扫描 key1值在['a','a']区间中的二级索引记录 ,  同时在key3的索引列中扫描key3值在['b','b']区间中的二级索引记录,然后从两者的操作中找出 主键 列值相同的记录,在根据这些共有的主键值,回表操作.

        Union 索引合并

        SELECT * from table where key1 = 'a' OR key3 = 'b' 

        对于上面的查询语句,无论是使用key1列的索引还是key3列的索引,对应的扫描区间都是 (-∞ , +∞) , 其每一条记录都需要回表操作.

        但是上面的查询也不会用到全表扫描,可以同时使用 key1的索引和key3列的索引来执行查询.即 在key1的索引中扫描 key1值在['a','a']区间中的二级索引记录 ,  同时在key3的索引列中扫描key3值在['b','b']区间中的二级索引记录,然后根据二级索引记录的id值在两者结果中去重,在根据去重后的id值执行回表操作,这样重复的id只需要回表一次.

         Sort-Union合并

        SELECT * from table where key1 < 'a' OR key3 > 'b'

 查询方法: 

  1. 先根据 key1 < 'a' 从 key1的二级索引中获取二级索引记录,并将获取到的二级索引记录的主键值进行排序.
  2. 在根据 key3 > 'b' 从 key3的二级索引中获取二级索引记录,并将获取到的二级索引记录的主键值进行排序.
  3. 排好序之后的操作步骤 和 Union一样.

      

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/834521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型日报2024-05-05

大模型日报 2024-05-05 大模型新闻: Techs new arms race: The billion-dollar battle to build AI - 小型专业化模型可以为各种细分应用提供关键的、高效的能力&#xff0c;这是AI行业必须要支持的。来源&#xff1a;VentureBeatGenerative AI on Agenda for Next CIECA Webin…

使用llama.cpp量化部署LLM

以llama.cpp工具为例&#xff0c;介绍模型量化并在本地部署的详细步骤。这里使用 Meta最新开源的 Llama3-8B 模型。 1 环境 系统应有make&#xff08;MacOS/Linux自带&#xff09;或cmake&#xff08;Windows需自行安装&#xff09;编译工具Python 3.10以上编译和运行该工具 …

【比邻智选】MR880A模组

&#x1f680;高性价比&#xff0c;5G/4G双模&#xff0c;稳定可靠 &#x1f310;功能丰富&#xff0c;5G特性一应俱全 &#x1f9e9;多封装兼容&#xff0c;适配性强&#xff0c;灵活升级智能设备

这 7 道 Redis 基础问题,很常见!!

后端项目如果用到分布式缓存的话&#xff0c;一般用的都是 Redis。不过&#xff0c;Redis 不仅仅能做缓存&#xff0c;还能用作分布式锁、延时队列、限流等等。 什么是 Redis&#xff1f; Redis[1] &#xff08;REmote DIctionary Server&#xff09;是一个基于 C 语言开发的…

Unity数据持久化之Json

目录 Json概述Json文件格式Json配置规则Excel转Json C#读取存储Json文件JsonUtlityJsonUtlity序列化JsonUtility反序列化 LitJsonLitJson序列化LitJson反序列化JsonUtility和LitJson对比 Json概述 Json是什么? 全称:JavaScript对象简谱(JavaScript Object Notation) Json是国…

ESP8266-01s刷入固件报SP8266 Chip efuse check error esp_check_mac_and_efuse

一、遇到的问题 使用ESP8266 固件烧录工具flash_download_tools_v3.6.8 烧录固件报错&#xff1a; 二、解决方法 使用espressif推出发基于python的底层烧写工具&#xff1a;esptool 安装方法&#xff1a;详见https://docs.espressif.com/projects/esptool/en/latest/esp32/ …

子查询之一(单行子查询, 多行子查询)

1. 子查询 子查询是指一个查询语句嵌套在另一个查询语句内部的查询.这个特性在MySQL4.1开始引入. SQL中子查询的使用大大增强了SELECT查询的能力.因为很多时候查询需要从结果集中获取数据&#xff0c;或者需要从同一个表中先计算得到一个数据结果&#xff0c;然后与这个数据结…

【go项目01_学习记录08】

学习记录 1 模板文件1.1 articlesStoreHandler() 使用模板文件1.2 统一模板 1 模板文件 重构 articlesCreateHandler() 和 articlesStoreHandler() 函数&#xff0c;将 HTML 抽离并放置于独立的模板文件中。 1.1 articlesStoreHandler() 使用模板文件 . . . func articlesSt…

最新:Lodash 严重安全漏洞背后你不得不知道的 JavaScript 知识

可能有信息敏感的同学已经了解到&#xff1a;Lodash 库爆出严重安全漏洞&#xff0c;波及 400万 项目。这个漏洞使得 lodash “连夜”发版以解决潜在问题&#xff0c;并强烈建议开发者升级版本。 我们在忙着“看热闹”或者“”升级版本”的同时&#xff0c;静下心来想&#xf…

【退役之重学Java】如何解决消息持续积压等问题

一、将读写数据库等耗时的操作&#xff0c;从消费者逻辑中抽取出来&#xff0c;专门部署机器去完成这部分操作。

FebHost:什么是域名DNS服务器?

域名服务器是一种将域名转换为IP地址的计算机。在域名系统&#xff08;DNS&#xff09;中&#xff0c;它起着至关重要的作用。用户只需在浏览器的地址栏输入域名&#xff0c;而无需手动输入网站服务器的IP地址&#xff0c;就可以访问网站。 每个已注册的域名都必须在其DNS记录…

使用Python读取las点云,写入las点云,无损坐标精度

目录 1 为什么要写这个博文2 提出一些关键问题3 给出全部代码安装依赖源码&#xff08;laspy v2.x&#xff09; 1 为什么要写这个博文 搜索使用python读写las点云数据&#xff0c;可以找到很多结果。但是&#xff01; 有些只是简单的demo&#xff0c;且没有发现/说明可能遇到的…

【第16章】spring-mvc之多文件上传

文章目录 前言一、文件大小限制二、前端三、后端总结 前言 本章在上篇文件的上传基础上就行扩展,多文件上传、多线程处理&#xff0c;所有的文件上传成功则返回成功。 一、文件大小限制 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns…

震惊,现在面试都加科技与狠货了

震惊&#xff0c;现在面试都加科技与狠货了 生成式AI盛行的现在&#xff0c;程序员找工作变容易了吗我和老痒喝着大酒&#xff0c;吃着他的高升宴&#xff0c;听他说他面试的各种细节&#xff0c;老狗我只恨自己动作慢了一步&#xff0c;不然现在在那侃侃而谈的就是我了。 面试…

守护数字疆域:2024年网络安全报告深度解读

在这个数据如潮涌动的数字时代&#xff0c;每一比特信息都可能是攻防双方角力的战场。《Check Point 2024年网络安全报告》不但为我们揭示了过去一年网络安全世界的风云变幻&#xff0c;更以前瞻性的视角勾勒出未来的挑战与机遇。此刻&#xff0c;让我们携手深潜这份权威指南的…

Redis-6 三种集群模式:主从模式、哨兵模式、分片集群

主从模式 一.介绍一下redis的主从同步 单节点的redis的并发能力是有上限的&#xff0c;要实现高并发&#xff0c;就要搭建主从集群&#xff0c;实现读写分离。通常是一主多从&#xff0c;主节点负责写数据&#xff0c;从节点负责读数据。 二.介绍一下主从模式同步数据的流程…

GIS找工作:天津测绘院24届春招Offer面经

本文介绍2024届春招中&#xff0c;天津市测绘院有限公司的1场面试的提问问题&#xff0c;以及后续体检环节的相关流程等。 2024年04月投递了天津市测绘院有限公司的软件开发类岗位&#xff0c;暂不清楚所在部门。目前完成了一面&#xff0c;并有幸获得Offer&#xff1b;在这里记…

分位数回归的基本原理和特点

基本模型及解释 分位数回归经典模型是由Koenker和Bassett (1978b)引入的&#xff0c;它从位置模型中的普通分位数(也称为“百分位数”)的概念扩展到更一般的一类线性模型&#xff0c;其中条件分位数具有线性形式。为了简单地回忆一下普通分位数&#xff0c;考虑一个实数随机变…

QGraphicsView实现简易地图11『指定层级-定位坐标』

前文链接&#xff1a;QGraphicsView实现简易地图10『自适应窗口大小』 提供一个地图初始化函数&#xff0c;指定地图显示的中心点和地图缩放层级 能够让地图显示某一层级的瓦片&#xff0c;并将中心点坐标显示在视图中心。 1、动态演示效果 7级地图-大连-老虎滩 定位到 8级地图…