当前位置: 首页 > news >正文

mysql索引介绍

索引可以提升查询速度,会影响where查询,以及order by排序。MySQL索引类型如下:

  • 从索引存储结构划分:B Tree索引、Hash索引、全文索引

  • 从应用层次划分:主键索引、唯一索引、单值索引、复合索引

  • 从索引键值类型划分:主键索引、辅助索引(二级索引)

  • 从数据存储和索引键值逻辑关系划分:聚集索引(聚簇索引)、非聚集索引(非聚簇索引)

1.什么是索引

索引是为了高效获取数据的数据结构,能加快数据库查询数据的速度。

2.索引的存储方式

索引存储是由B+树来实现的,数据都存放在叶子节点,非叶子节点只存储主键值。叶子节点之间用双向指针连接,构成双向链表,由小到大排列。

3.索引的优势和劣势

优势:

  1. 可以提高数据的检索速度,减少IO次数。
  2. 通过索引列对数据进行排序,可大大提升效率。

劣势:

  1. 索引会占用磁盘的空间。
  2. 会影响更新表的效率,不仅要更新数据,还要同步更新索引。

4.常用的索引

4.1主键索引

索引列的值必须是唯一的,而且不允许有空值。

4.2唯一索引

索引列的值必须是唯一的,可以为空值。

4.3全文索引

如果在需要模糊查询的列上设置普通索引,那么使用like查询索引并不生效,此时就需要创建全文索引了。

4.4组合索引

组合索引即一个索引包含多个列,创建组合索引所需的开支比多个单值索引要小。

5.组合索引中的最左前缀原则

例如此时表中有a,b,c三列,我们创建(a,b)为组合索引,那么我们在查询时如果需要用到此索引,就需要遵守最左前缀原则,通俗的说就是我们在使用select查询语句时,where后面的条件里面必须有创建索引时的最左列(上面的a列),否则查询时索引不生效。

 具体原因:在组合索引中,叶子节点从左到右是整体a有序,b的话其实并不是整体有序的,而是在a的基础上局部有序,即在每个单独的叶子节点里面b才是有序的。这样的话就很好解释了,比如我们只把b作为条件来查询,那这样的话由于b并不是整体有序的,这样和全局查询没什么区别,但是如果我们把a和b都作为条件,那么因为a是整体有序的,就可以很快的锁定满足a的条件,然后再局部的查询b就可以大大提升效率了。

举例:

  • select * from table where a=’’and b=’’索引生效
  • select * from table where b=’’and a=’’索引生效
  • select * from table where c=’’and a=’’索引生效(利用索引下推先筛a)
  • select * from table where b=’’and c=’’索引不生效

6.索引创建的原则

6.1需要创建的情况:

  • 主键会自动建立唯一索引。
  • 频繁的作为查询的条件的字段。
  • 作为排序的字段。order
  • 作为分组的字段。group

6.2不需要创建的情况:

  • 表内本身的数据太少。
  • 经常要增删改的表,因为要一直同步修改索引。
  • 不作为查询条件的字段。
  • 数据重复且分布比较均匀的字段,比如性别。
http://www.lryc.cn/news/120034.html

相关文章:

  • 说一下什么是tcp的2MSL,为什么客户端在 TIME-WAIT 状态必须等待 2MSL 的时间?
  • 更新spring boot jar包中的BOOT-INF/lib目录下的jar包
  • 纯前端 -- html转pdf插件总结
  • 数据结构和算法基础
  • JS二维数组转化为对象
  • 通过 EPOLL 解决客户端同时连接多服务器的问题
  • JavaScript数据结构【进阶】
  • jQuery编程学习3(jQuery 其他方法: jQuery 拷贝对象、 jQuery 多库共存、jQuery 插件)
  • jvm——垃圾回收机制(GC)详解
  • 计算机组成原理-笔记-第七章
  • 【Linux】网络基础2
  • ​可视化绘图技巧100篇进阶篇(四)-三维簇状柱形图(3D Clustered Bar Chart)
  • 架构设计第八讲:架构 - 理解架构的模式2 (重点)
  • Java中的Maven Shade插件是什么?
  • ffmpeg的bpp是什么?
  • 【C# 基础精讲】类和对象的概念
  • 微信ipad实现批量添加联系人及批量分组
  • Highcharts引入
  • 腾讯云轻量和CVM有什么区别?不都是服务器吗?
  • Android高通8.1 Selinux问题
  • python图片爬虫
  • SpringBoot系列---【SpringBoot在多个profiles环境中自由切换】
  • Transformer架构
  • TVS二极管失效分析
  • k8s --pod详解
  • 论文阅读---《Unsupervised ECG Analysis: A Review》
  • npm四种下载方式的区别
  • 04_Hudi 集成 Spark、保存数据至Hudi、集成Hive查询、MergeInto 语句
  • 【ARM64 常见汇编指令学习 15 -- ARM 标志位的学习】
  • 【论文阅读】基于深度学习的时序预测——FEDformer