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

索引是什么

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

 

工作原理

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

 

为什么要用索引

    索引的一个主要目的就是加快检索表中数据的方法,能协助信息搜索者尽快的找到符合限制条件的记录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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库索引数据库管理系统中的一种排序数据结构,用于加快对数据库表中数据的查询和更新操作。索引类似于书本或字典的目录,它可以帮助数据库系统快速定位和访问特定数据。通过使用索引,可以提高数据库的查询效率和程序性能。索引通常使用B树或B+树等数据结构来实现。它可以在查询时快速定位到满足特定条件的数据,而不需要遍历整个表。因此,合理使用索引可以提高数据库的查询速度。然而,索引也有一些缺点,例如占用额外的存储空间和对数据的插入、更新和删除操作的性能影响。 #### 引用[.reference_title] - *1* [数据库索引详解](https://blog.csdn.net/qq_44483424/article/details/121385545)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [数据库索引是什么](https://blog.csdn.net/u013093761/article/details/99311264)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [MySQL3:索引](https://blog.csdn.net/weixin_34334744/article/details/85771091)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值