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

索引是什么

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

 

工作原理

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

 

为什么要用索引

    索引的一个主要目的就是加快检索表中数据的方法,能协助信息搜索者尽快的找到符合限制条件的记录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

 

内容纯属个人观点。

 

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

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值