IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 《每日一学系列》mysql索引的一些理解(1) -> 正文阅读

[数据结构与算法]《每日一学系列》mysql索引的一些理解(1)

mysql索引的一些理解(1)



索引的分类

  • 普通索引 NORMAL
  • 唯一索引 UNIQUE
  • 空间索引 SPATIAL (空间索引只能在存储引擎为MYISAM的表中创建)
  • 主键索引 PRIMARY KEY
  • 全文索引 FULLTEXT

NORMAL

表示普通索引,大多数情况下都可以使用

UNIQUE

表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique

PRIMARY KEY

Primary Key是拥有自动定义的Unique约束,但是每个表中可以有多个Unique约束,但是只能有一个Primary Key约束。

FULLTEXT

FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。


索引的方式

  • BTREE (B树(可以是多叉树))(常用)
  • HASH (key,value)

两者的区别:
Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。


但是Hash也有明显的缺点(计算hash值所带来的缺陷):

  • Hash 索引仅仅能满足”=”,”IN”和”<=>”查询,不能使用范围查询
  • Hash 索引无法被用来避免数据的排序操作
  • Hash 索引不能利用部分索引键查询
  • Hash 索引在任何时候都不能避免表扫描(hash值有可能相同)
  • Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高

添加索引

方法之一

ALTER TABLE 表名
ADD INDEX 命名(字段名) USING BTREE 或者 HASH;


EXPLAIN

mysql为我们提供了很有用的辅助武器explain,它向我们展示了mysql接收到一条sql语句的执行计划

因此我们需要看懂EXPLAIN SELECT输出的结果

在这里插入图片描述
主要需要看懂三个属性:type,key,rows

key:表明的是这次查找中所用到的索引
rows:指这次查找数据所扫描的行数(这里可以先这样理解,但实际上是内循环的次数)
type:本文要详细记录的连接类型,在mysql5.7中type的类型达到了14种之多


type

这里只记录和理解最重要且经常遇见的六种类型,它们分别是:

  • all 全局扫面
  • index 有序的全局扫描
  • range 有范围的索引扫描
  • ref 不唯一的索引扫描
  • eq_ref 唯一索引扫描
  • const 主键扫描

all

全局扫描,没有使用到索引,或者索引没有生效的情况
在这里插入图片描述
id虽然为主键,但是因为他的类型是vachar,但是我没有+引用符号,所以索引失效,使用全局索引。

index

此处查询所有信息并根据非唯主键字段排序
在这里插入图片描述
此处查询所有信息并根据主键字段排序

在这里插入图片描述
可以看到非主键的type是all,Extra使用到了filesort,而主键则是index类型。

这种连接类型只是另外一种形式的全表扫描,只不过它的扫描顺序是按照索引的顺序,所以排序的时候index类型比all更快。

range

range指的是有范围的索引扫描,相对于index的全索引扫描,它有范围限制,因此要优于index。range是基于索引字段的,其中相关范围关键字是:between,and,’>’,’<’,in和or属于索引范围扫描。

在这里插入图片描述

ref

基于非唯一索引(查找条件列使用了索引而且不为主键和unique),查询到还会进行小范围的查询,直到没有相同属性为止。但是如果使用了范围关键字,则仍是range。
在这里插入图片描述

eq_ref

基于唯一索引,查到即停止,因为没有重复属性。
但是在单个表中,曾尝试了很多方法想出现ref_eq的连接类型,然而很多时候出现的都是const

在这里插入图片描述

const

通常情况下,如果将一个主键放置到where后面作为条件查询,mysql优化器就能把这次查询优化转化为一个常量。至于如何转化以及何时转化,这个取决于优化器。


总结

初步了解一下mysql索引,以及explain 的使用,其中很多特殊的例子,以及细节没有详细了解,也没这么简单,需要对操作系统以及数据库的底层查询和运行原理要有一个清楚的理解。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-30 12:11:23  更:2021-09-30 12:12:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:24:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码