mysql索引

mysql索引

mysql中为什么要使用索引?有什么缺点吗?
索引其实就是一个数据结构,其功能就像是一个目录,能够快速的定位数据记录。
缺点: 索引也占用相应的空间,在更新或者新增数据的时候,索引也需要进行更新。

索引具体采用哪些数据结构呢?
B+树、B树、哈希表

介绍一下?
B+树是一颗多叉树,叶子节点存放的是数据记录,非叶子节点存放的是索引。
B树也是一颗多叉树,每个节点存放索引和数据记录。
哈希表底层使用的是哈希表,将索引作为key,将数据记录作为value。

比较一下?
B+树和哈希索引:B+树能够满足范围查询、联合索引、覆盖索引,查询复杂度是log(n)。而Hash索引,仅仅适用于查询单值,查询效率为O(1),而写不能够范围查询,不能够联合索引和覆盖索引,另外还需要考虑哈希冲突。
B+树和B树:B树无法进行范围查询,由于不是在叶子节点存放数据记录,所以IO次数相对于B+树相对较少。

什么是回表?
对于普通索引,B+树的叶子节点存放的是主键索引,我们需要根据叶子节点的主键索引再进行检索。这个过程称为回表。

什么是普通索引(非聚簇索引),什么是聚簇索引?
根据叶子节点是数据记录还是主键索引来区分,数据记录是聚簇索引,主键索引是非聚簇索引

非聚簇索引一定需要回表查询吗?
其实不一定,有时叶子节点存放的索引其实就是我们需要的结果。

什么是覆盖索引?
这里需要说的就是覆盖索引,就是我们需要检索的结果其实就是我们的索引。比如我们对于select id name from user where name=“123”,这里就不需要回表,另外也可以创建,联合索引。其应用场景,比如count(name) name设置为索引 就可以优化全局count计数。

联合索引是什么?多个字段的顺序如何选择?
联合索引就是多个列组成的索引。索引的顺序根据最左前缀原则来选择, 将频繁查询的放在最左端。

什么是最左前缀原则?什么条件下失效?
多个按照顺序排序,最左边的最先检索。原理就是:B+树的节点存放的就是多个列组成的联合索引,在多叉分支的时候,会先按照最左边的大小进行排序。在<> between like 的条件下会失效。

如何检查索引起了作用了呢?
explain查看sql语句的执行计划,根据执行计划来查询key字段的索引名称,然后查看extra是否是using index。另外查询优化器会根据最小成本原则(IO成本和CPU计算成本)进行优化,选出最小成本的执行计划。

什么情况下索引会失效?
联合索引的最左原则、对于非主键索引使用!= < >、where 子句中少用or 会导致放弃使用索引而进行全表扫描、like模糊查询以%开头,索引失效、

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值