索引篇
MySQL面试题
at night
这个作者很懒,什么都没留下…
展开
-
一、索引的分类,什么是覆盖索引,什么是回表,什么是索引下推
在查询时使用到了二级索引,而所查的内容只有二级索引里的字段,只需要在二级索引内就能查到,不需要再去聚簇索引拿完整数据,这个过程叫覆盖索引。在查询时使用到了二级索引,而所查的内容除了二级索引里的字段外还有其他字段,需要在二级索引查到主键值再去聚簇索引查完整字段,这个过程叫回表。原创 2024-08-21 17:27:21 · 147 阅读 · 0 评论 -
二、索引失效的场景
原因:mysql在遇到字段和值不同类型的比较时,会把字段或值都转换为数字类型,再进行比较。如果字段是字符,值是数字,则会把字段转数字,此时相当于对字段使用函数,也就导致索引失效;如果字段是数字,值是字符,则会把值转为数字,此时索引不会失效。其中a是索引,b不是索引。原因:在联合索引中,数据是按第一个字段先排序好,再在第一个字段相等的情况下对第二个字段排序。原因:or表示只要满足一个就可以,所以只有一个条件是索引并没有意义,除非ab都是索引列。原因:因为使用函数后的值是进过计算的值,与索引树里的值不匹配。原创 2024-08-21 16:59:42 · 189 阅读 · 0 评论 -
三、联合索引失效场景,哪一个字段使用到了联合索引,根据sql如何建立联合索引
以上场景均用上了联合索引,虽然a在条件最后,但优化器会自动调整位置。以上场景均在在a无序的情况下b、c无法有序。1、对(a,b,c)创建联合索引。1、对(a,b,c)创建联合索引。原创 2024-08-21 19:30:34 · 409 阅读 · 0 评论 -
四、什么时候适合 / 不适合创建索引
目录1、索引的缺点2、什么时候适合索引3、什么时候不适合索引1、索引的缺点同样需要占用物理空间,数据量越大,占用越大创建维护索引的耗时随着数据量提升而加大会降低增删改的效率,因为每次增删改要重新维护B+树2、什么时候适合索引字段具有唯一性某些频繁查询的字段,如果有多个,可以建立联合索引经常用于group by和order by的字段,索引已经排好序列3、什么时候不适合索引where、group by和order by后用不到的字段一些区分度比较低的字段,比如性别,因为优化器发原创 2024-08-22 14:10:18 · 113 阅读 · 0 评论 -
五、如何优化索引
目录优化为前缀索引优化为覆盖索引主键索引最好使用自增主键索引字段最好设置为 NOT NULL预防索引失效优化为前缀索引使用字段中前几个字符建立索引,在为一些大字符串字段建立索引时,h使用前缀索引可以减小索引项的大小优化为覆盖索引当我们频繁查询的字段有多个时,可以将这多个字段设置为一个联合索引,这就使得所查字段都能在这个索引中获取,不需要进行回表主键索引最好使用自增主键自增主键可以使得每次插入的值都在之前节点的后面,不需要移动之前的节点,从而提升插入效率索引字段最好设置为 NOT N原创 2024-08-22 14:48:55 · 201 阅读 · 0 评论 -
六、为什么mysql使用B+树做为索引
B+树是多叉树,树高度比二叉树矮,有利于减少磁盘IO次数。B+树的非叶子节点只存放索引不放数据,这可以使得非叶子节点能存放更多的索引,使得整颗树要比B树更矮。B+树有大量冗余节点,这使得B+树在删除插入时的效率都非常高,因为冗余节点的存在,避免了树的频繁变化。B+树在范围查询方面更高效,因为叶子节点直接用了链表相连,使得范围查询通过链表高效查询,不需要再经过非叶子结点多次磁盘IO原创 2024-08-22 15:49:27 · 63 阅读 · 0 评论