美文网首页
数据库索引知识总结

数据库索引知识总结

作者: 赵哥窟 | 来源:发表于2023-06-04 22:19 被阅读0次
什么是索引?

索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。通过索引,可以让数据库不必全表扫描,直接快速访问到符合条件的记录,大大加快了查询速度。

索引的效率,优点,缺点

索引的效率取决于索引列的值是否散列,即该列的值如果越互不相同,那么索引效率越高。反过来,如果记录的列存在大量相同的值,例如性别列,50%男,50%女,因此,对该列创建索引就没有意义。可以对一张表创建多个索引。索引的优点是提高了查询效率,缺点是在插入、更新和删除记录时,需要同时修改索引,因此,索引越多,插入、更新和删除记录的速度就越慢。

什么情况下需要/不建或少建立索引

需要
1、频繁作为查询条件的字段
2、排序的字段
3、与其他表关联的字段

不建或少建
1、表记录太少
2、经常增删改的表
3、数据重复且分布平均的表字段,比如性别字段50%男 %50女,建立索引也不会提高查询效率

为什么加索引后会使查询变快?

在MySQL中, 索引有两种分类方式:逻辑分类和物理分类。
按照逻辑分类,索引可分为:
①主键索引:一张表只能有一个主键索引,不允许重复、不允许为 NULL;
②唯一索引:数据列不允许重复,允许为 NULL 值,一张表可有多个唯一索引,但是一个唯一索引只能包含一列
③普通索引:一张表可以创建多个普通索引,一个普通索引可以包含多个字段,允许数据重复,允许 NULL 值插入;
④全文索引:让搜索关键词更高效的一种索引。
全文索引和like + %有什么不同?
like + % 在文本比较少时是合适的,但是对于大量的文本数据检索,是不可想象的。全文索引在大量的数据面前,能比 like + % 快 N 倍
⑤组合索引:为了提高mysql效率可建立组合索引,遵循”最左前缀”原则。

按照物理分类,索引可分为:
①聚集索引:以主键创建的索引;聚集索引的叶子节点存储的是表中的数据;
②非聚集索引:非主键创建的索引;非聚集索引在叶子节点存储的是主键和索引列;使用非聚集索引查询数据,会查询到叶子上的主键,再根据主键查到数据(这个过程叫做回表)。

在未加索引时,根据条件查询到一条数据后并不会停止查询,因为可能还会有条件相同的记录,这就是所谓的全表扫描。加上索引后,会查询到叶子上的主键和索引列,再根据主键查到数据,不会进行全表扫描所以查询速度会变快。

为什么 B+ Tree 索引会降低新增、修改、删除的速度?

①B+ Tree 是一颗平衡树,如果对这颗树新增、修改、删除的话,会破坏它的原有结构;
②我们在做数据新增、修改、删除的时候,需要花额外的时间去维护索引;
③正因为这些额外的开销,导致索引会降低新增、修改、删除的速度。

索引失效的场景

①对索引字段进行了运算或者使用了函数
②表中字段的数据类型和查询的字段类型不一致
③违反了索引的最左匹配原则
④模糊匹配 LIKE’%sql%’ 模糊匹配连最开始的字符串都不确定,所以不会走索引,LIKE’sql%’这个是会走索引的。
⑤优化器认为全表扫描更快
举个例子:如果数据有10万条,要查询的where age > 20 可能有9万多条。查询万9万条还要回表,优化器分析还不如进行全表扫描

EXPLAIN 结果中的type字段

system:系统表,少量数据,往往不需要进行磁盘IO
const:常量连接
eq_ref:主键索引(primary key)或者非空唯一索引(unique not null)等值扫描
ref:非主键非唯一索引等值扫描
range:范围扫描
index:索引树扫描
ALL:全表扫描(full table scan)

type扫描方式由快到慢
system > const > eq_ref > ref > range > index > ALL

相关文章

  • 数据库索引结构总结

    [TOC] 参考 数据库索引数据结构总结 本文摘抄自数据库索引数据结构总结 1. 摘要 数据库索引是数据库中最重要...

  • 数据库之索引总结

    索引在数据库中可以说是相当重要的一块知识点了,也是面试经常被问的,这篇文章就总结一下索引相关的知识点,包括索引的底...

  • 数据库积累:索引相关

    前言 在使用数据库的时候,最需要了解的知识点肯定就是索引,所以,针对索引希望能够整理出一些知识点,做个简单总结。 ...

  • 2016/3/9 周三:学习方法

    今天 学习方法 如何看书:知识网络的构建:知识数据库,形成索引表 如何应用(出题):预判性总结+冗余代码:体系脉络...

  • mysql 系列:搞定索引

    摘要 索引是数据库里重要的组成部分,也是提高查询效率必备的知识点。本文将会介绍索引作用、索引类型、索引优化以及索引...

  • ES6 - 结构化数据操作

    知识点: 索引 = 数据库 类型 = 表 文档/文件 = 数据记录 1. 创建索引 ps:索引中的片区无法修改,可...

  • MySQL索引原理详解

    学习MySQL数据库索引原理知识,同时了解与性能相关的优化实践。 讲述关于索引的原理,为后面数据库优化提供合适的方...

  • 数据库基础和SQL基础总结

    本文会总结下数据库知识,SQL基础,常用SQL语句总结; 一、数据库基础相关概念 二、数据库重点知识点 三、数据库...

  • 数据库索引知识

    https://blog.csdn.net/sinat_39587248/article/details/8052...

  • 【练手项目】学习培训应用——数据库篇

    数据库表 这里只简单介绍数据库表结构,详情参见数据库文件 数据库中未建立索引,后期有需要的时候再建 知识相关 知识...

网友评论

      本文标题:数据库索引知识总结

      本文链接:https://www.haomeiwen.com/subject/mchiedtx.html