看完就知道什么是数据库索引

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-28 18:48   11   0

索引是什么

索引在表的上创建。索引是一种数据结构,索引包含一个表中列的值,并且这些值存储在一个数据结构中。

工作原理

使用索引的全部意义就是通过缩小一张表中需要查询的记录/行的数目来加快搜索的速度

为什么要用索引

索引的一个主要目的就是加快检索表中数据的方法,能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。索引存储了指向表中某一行的指针。

如果没有索引:select * from table1 where idCard="123456789",必须遍历整个表,直到idCard等于123456789的这一行被找到为止;有了索引之后,即可在索引中查找。由于索引是经过算法优化过的,因而查找次数要少的多。简而言之,索引是用来定位的。

怎么用(使用原则)

索引使用原则:表中的某一列或者某几列在查询过程中使用得非常频繁,那就应按需在该列上创建索引

索引分类

1.聚集索引(主键索引):在数据库里面,所有行数都会按照主键索引进行排序。

2.非聚集索引:

普通分类

(1) 唯一索引

作用:避免同一个表中某数据列中的值重复

与主键索引的区别:主键索引只能有一个,唯一索引可有多个

(2) 普通索引

作用:快速定位特定数据

注意:index 和 key 关键字都可以设置常规索引,但不要加太多普通索引,会影响数据的变更效率

(3) 全文索引

作用:快速定位特定数据

按索引列个数分类

(1) 单行索引:单数据列

(2) 复合索引:多数据列组成的复合索引。复合索引使用原则:最左原则,有A、B、C三个字段建立的联合索引,如果A字段在查询时为空,那么这个复合索引不生效;如果A字段不为空,B、C不管为不为空,那么复合索引都是生效的。

是不是建了索引,在查询时都会使用到

并不是,很多sql都不会使用到建立的索引。比如:

1. 模糊查询以%开头,如 like " %Nanci"

2. 索引列进行表达式计算或者函数式操作

3. 索引列用了 != ,or, in(多个值)

备注:in里面如果只有一个值,例如:age in(12) 是等同于age=12的,会使用到索引。

4. 在where子句中进行null值判断:age is null( is not null)

5.复合索引不满足最左原则

数据库索引使用代价

数据库索引并不是越多越好,心里要有一把称,适可而止,恰到好处。

1.索引会占用空间:表越大,索引占的空间越大。

2.数据库性能:主要是在表中新增、修改和删除数据时,索引也会有相同的操作。建立在某列或多列的索引需要保存该列最新的数据。

关于hash和btree两种索引方法对比

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

但是我们日常使用的都是:btree。

使用:btree而不使用hash。最重要的一点,我觉得是:Hash索引在任何时候都不能避免表扫描。

推荐hash和btree对比的一篇文章:https://blog.csdn.net/liushuxiaderiluo/article/details/97235285

内容纯属个人观点。

爬山了这座山,才能看到山下的风景。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP