Mysql__索引

1)索引问题----组合索引

  1. 最左前缀匹配原则

          在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配

ALTER TABLE `index` ADD INDEX test_AA_BB_CC_DD (AA,BB,CC,DD);SHOW INDEX FROM `index`;EXPLAIN SELECT * FROM `index` WHERE AA=1 AND BB=2;(会)
EXPLAIN SELECT * FROM `index` WHERE AA LIKE '%1%';(不会)
EXPLAIN SELECT * FROM `index` WHERE AA=1 AND BB=2 AND CC=3 ;(会)
EXPLAIN SELECT * FROM `index` WHERE AA=1 AND BB=2 AND EE=5 ;(会)
EXPLAIN SELECT * FROM `index` WHERE BB=2 AND CC=3;(不会)

 

  2.为什么要使用联合索引

     减少开销。建一个联合索引(col1,col2,col3,col4),实际相当于建了不以col2,col3,col4开头的所有索引。每多一个索引,都会增加写操作的开销和磁盘空间的开销。对于大量数据的表,使用联合索引会大大的减少开销!

    覆盖索引。对联合索引(col1,col2,col3),如果有如下的sql: select col1,col2,col3 from test where col1=1 and col2=2。那么MySQL可以直接通过遍历索引取得数据,而无需回表,这减少了很多的随机io操作。减少io操作,特别的随机io其实是dba主要的优化策略。所以,在真正的实际应用中,覆盖索引是主要的提升性能的优化手段之一。

    效率高。索引列越多,通过索引筛选出的数据越少。有1000W条数据的表,有如下sql:select from table where col1=1 and col2=2 and col3=3,假设假设每个条件可以筛选出10%的数据,如果只有单值索引,那么通过该索引能筛选出1000W10%=100w条数据,然后再回表从100w条数据中找到符合col2=2 and col3= 3的数据,然后再排序,再分页;如果是联合索引,通过索引筛选出1000w10% 10% *10%=1w,效率提升可想而知!

  3)explain看执行计划

   type列

   性能从高到低依次是:System,const,,ref,range,index,all

    All 这个就是所谓的全表扫描,没有用到任何的index,mysql就是从头到尾把整个表遍历一边,找到所需要的数据行。效率是最差的。如下图,这个表中的usertype不是索引,这个查询中没有用到任何索引,所以就出现了全表扫描的结果。

   index:这种类型表示mysql会对整个该索引进行扫描。要想用到这种类型的索引,对这个索引并无特别要求,只要是索引,或者某个联合索引的一部分,mysql都可能会采用index类型的方式扫描。但是呢,缺点是效率不高,mysql会从索引中的第一个数据一个个的查找到最后一个数据,直到找到符合判断条件的某个索引。所以,上述语句会触发索引。

range 这个一般就是在你的where语句中出现了between或者“>”这种符号的时候会出现这个。这种范围扫描索引扫描比全表扫描要好,因为它只需要开始于索引的某一点,而结束语另一点,不用扫描全部索引。


    ref:这种类型表示mysql会根据特定的算法快速查找到某个符合条件的索引,而不是会对索引中每一个数据都进行一一的扫描判断,也就是所谓你平常理解的使用索引查询会更快的取出数据。而要想实现这种查找,索引却是有要求的,要实现这种能快速查找的算法,索引就要满足特定的数据结构。简单说,也就是索引字段的数据必须是有序的,才能实现这种类型的查找,才能利用到索引。

const,system 当mysql能对查询的部分就行优化,并且转换成一个常量的时候,它就会使用这种访问类型了。比如你把一行的主键当做where条件放进去,那mysql就可以把它转换成一个常量,然后查询。如下图:uid是主键,作为where条件就能出现这个效率最高的查询结果。

extra列

① extra列中出现的信息一般不是太重要,但是还是有很多信息我们可以从这里面获取到:

② using index:出现这个说明mysql使用了覆盖索引,避免访问了表的数据行,效率不错!

③ using where:这说明服务器在存储引擎收到行后将进行过滤。有些where中的条件会有属于索引的列,当它读取使用索引的时候,就会被过滤,所以会出现有些where语句并没有在extra列中出现using where这么一个说明。

④ using temporary:这意味着mysql对查询结果进行排序的时候使用了一张临时表。

⑤ using filesort:这个说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Mysql 索引】

索引的基本知识 1. 索引介绍 索引的出现就是为了提高数据检索效率,就跟书的目录一样。索引不但在内存中,还写在硬盘中。索引是存储引擎实现的。 2. 索引常见模型 搜索树: 每个节点左儿子小于父节点,父节点小于右节点. select/update 复杂…

Mysql、索引

索引 数据库中的查询操作非常普遍,索引就是提升查找速度的一种手段 索引的类型 从数据结构角度分 1.B索引:传统意义上的索引,最常用最普遍的索引2.hash索引:hash索引是一种自适应的索引,数据库会根据表的使用情况自动生…

MySQL—索引

索引是什么? 索引是一种特殊的文件,它们包含着对数据表里所有记录的引用指针。 索引是一种数据结构,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据表中的数据。通俗来说,索引相当与目录&#xff0c…

MySQL的索引有哪些

一、索引是什么# 索引,在MySQL中也叫“键(key)”,是存储引擎用于快速找到记录的一种数据结构。如果把数据库的一张表比作一本书,那索引则是这本书的目录,通过目录,我们能快速找到我们想要的主题…

mysql 的 索引

「深度学习福利」大神带你进阶工程师,立即查看>>> 1 什么是索引? 索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。 索引的实现 通常使用B树及其变种B树。 索引相当于字典的目录,作用…

Mysql高性能索引

一、索引是什么 二、索引的底层实现原理 三、InnoDB的存储结构是怎样的? 四、InnoDB索引和MyIsam索引对比 五、Mysql为什么会选错索引 六、唯一索引和普通索引的区别 导读:本博文讲解了索引是什么和索引的底层原理,提到了 BTREE和 BTREE hash底层…

MySQL:索引

一、索引的常见模型 索引的出现是为了提高数据查询的效率。实现索引的方式有很多种,比较常见的数据结构有:哈希表、有序数组和搜索树。 索引是在存储引擎层实现的,不同存储引擎索引工作方式不同。 1.1 哈希表 哈希表:键值存储…

【MySQL】MySQL的索引

目录 索引1.1 概念1.2 作用1.3 使用场景1.4 使用1.5 索引最常用的数据结构 索引 1.1 概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引, 并指定索引的类型,各类索引有各自的数据结构实现。 …

MySQL 的索引

文章目录 索引简介普通索引主键索引唯一索引全文索引外键索引复合索引复合索引生效的几种方式复合索引会失效的情况 索引的优点高性能的索引策略独立的列前缀索引和索引的选择性复合索引选择合适的索引列顺序聚簇索引索引的 Btree 结构聚簇索引和非聚簇索引的区别聚簇索引的优点…

什么是 MySQL 索引?

什么是索引? 假设我们有一张数据表 employee(员工表),该表有三个字段(列),分别是name、age 和address。假设表employee有上万行数据(这公司还真大),现在需要从这个表中查找出所有名字是‘ZhangSan’的雇员信…

MySql知识体系总结(2021版)

存储引擎负责在MySQL中存储数据、提取数据、开启一个事务等等。存储引擎通过API与上层进行通信,这些API屏蔽了不同存储引擎之间的差异,使得这些差异对上层查询过程透明。存储引擎不会去解析SQL。 二、对比InnoDB与MyISAM 1、 存储结构 MyISAM&#xff…

一文搞懂MySQL索引所有知识点(建议收藏)

Mysql索引 索引介绍 索引是什么 官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。 一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储…

Doris安装

Apache Doris 由百度大数据部研发(之前叫百度 Palo,2018 年贡献到 Apache 社区后, 更名为 Doris ),在百度内部,有超过 200 个产品线在使用,部署机器超过 1000 台,单一 业务最大可达…

深入理解hashmap底层实现原理

目录 总体介绍 HashMap元素的存储 在hashmap中添加元素 HashMap的扩容机制 HashMap的线程安全性 1.添加和删除元素时存在不安全性 2.进行扩容操作时存在不安全性 3.哈希冲突存在不安全性 4.线程之间的不可见性导致安全问题 总体介绍 HashMap是我们用于元素映射使用频率最…

RK3588平台开发系列讲解(项目篇)YOLOv5部署测试

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、YOLOv5环境安装二、YOLOv5简单使用2.1、获取预训练权重文2.2、YOLOv5简单测试2.3、转换为rknn模型2.4、部署到 RK 板卡三、airockchip/yolov5简单测试3.1、转换成rknn模型并部署到板卡沉淀、分享、成长,让自己和他…

HTML编码问题导致的乱码

今天一个学弟问了一个问题&#xff0c;它写的HTML代码打开显示的是乱码。 然后就给我发来了代码。 就一个HTML文件和一个文件夹&#xff0c;打开一看&#xff0c;很简单的代码。 <!DOCTYPE html> <html lang""> <head><meta charset"UTF…

URL和HTML编码

URL和HTML编码 在呈现HTML页面时,有时候需要显示一些特殊的字符,例如”<”和”&”,因为它们是HTML专用字符,因此需要一些技巧.例如要想显示AT&T,在代码中必须写成AT&amp;T。同样URL中的,&,/等字符也为专用字符,所以如果需要在URL参数中使用它们,也必须对这些…

简单的Html编码转换工具

一、前言 因为项目经常会碰Html转码&#xff0c;特别是返回的xml报文&#xff0c;总是显示&# 十六进制的编码&#xff0c;查中文的时候特别不方便&#xff0c;所以就做了一个简单的C#桌面应用程序。 二、涉及软件 Visual Studio 2019 Preview 三、使用框架 .NET Fram…

怎么设置html代码中的编码格式,html怎么设置编码

在html中&#xff0c;可以使用meta标签来设置编码&#xff0c;语法格式“”。meta标签提供了HTML文档的元数据&#xff0c;元数据不会显示在客户端&#xff0c;但是会被浏览器解析&#xff1b;而charset属性用于定义文档的字符编码。 本教程操作环境&#xff1a;windows7系统、…

Unicode编码对应的HTML 、JS 、CSS码

平时写代码很少用到HTML的特殊字符&#xff0c;最常用的可能是 了&#xff0c;但有时在移动端为了节省时间&#xff0c;可能会用这些字符实现某种特殊效果&#xff0c;现整理如下&#xff1a; 使用方法&#xff1a; 这些字符属于unicode字符集&#xff0c;所以&#xff0c;你…