面试官:要不简单聊一下你对MySQL索引的理解?
MySQL索引?这玩意儿还能简单聊?明显是在挖坑,幸好老夫早有准备,切听我一一道来。 一、索引是什么? 索引是帮助MySQL高效获取数据的数据结构。 二、索能干什么? 索引非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。 索引能够轻易将查询性能提高好几个数量级,总的来说就是可以明显的提高查询效率。 三、索引的分类? 1、从存储结构上来划分:BTree索引(B-Tree或B+Tree索引),Hash索引,full-index全文索引,R-Tree索引。这里所描述的是索引存储时保存的形式, 2、从应用层次来分:普通索引,唯一索引,复合索引 3、根据中数据的物理顺序与键值的逻辑(索引)顺序关系:聚集索引,非聚集索引。 平时讲的索引类型一般是指在应用层次的划分。 就像手机分类:安卓手机,IOS手机 与 华为手机,苹果手机,OPPO手机一样。 普通索引 : 即一个索引只包含单个列,一个表可以有多个单列索引 唯一索引 : 索引列的值必须唯一,但允许有空值 复合索引 : 多列值组成一个索引,专门用于组合搜索,其效率大于索引合并 聚簇索引(聚集索引) : 并不是一种单独的索引类型,而是一种数据存储方式。具体细节取决于不同的实现,InnoDB的聚簇索引其实就是在同一个结构中保存了B-Tree索引(技术上来说是B+Tree)和数据行。 非聚簇索引 : 不是聚簇索引,就是非聚簇索引