目录
1、什么是索引
索引是一种有序的数据结构,用来提高数据检索的效率
2、索引能干什么
索引可以减少数据库IO操作和降低CPU性能消耗
3、索引的优缺点
- 优点:提高查询效率
- 缺点:索引的建立需要占用一定的磁盘空间,降低表的更新速率(update、insert、delete)
4、MySQL索引结构分类
MySQL索引是在存储引擎层实现的,不同存储引擎有不同的索引结构,主要包含以下几种:
1、B+Tree索引 最常见的索引类型
2、Hash索引 底层数据结构是哈希表,由于哈希函数,不支持范围查询
3、R-Tree(空间索引) MyISAM引擎的一个特殊索引,常用于空间数据结构
4、Full-Text(全文索引) 一种通过建立倒排索引,快速匹配文档的方式
5、索引结构介绍
-
B Tree
5阶B树,意味着最多有5个节点,4个key,每一个结点上均有元素
-
B+ Tree
元素均分布在叶子结点上且叶子结点之间形成了一个单向链表
MySQLB+树索引在原B+树的基础上做了增强,每个叶子结点之间形成有尾指针双向链表
-
Hash索引
通过Hash算法,将对应索引字段放置在对应的哈希槽中
特点:
- 不支持范围查询
- 无法利用哈希索引完成排序操作
- 查询效率高,通常只需要一次检索,效率要高于B+Tree索引
面试题:
为什么InnoDB引擎选择使用B+Tree索引结构?
1、对于二叉树、红黑树(二叉平衡树)在大数据量下性能低效,B+Tree层级少
2、对于BTree,无论是叶子结点还是非叶子结点都会保存数据,而数据都会占用页的存储空间,这样就会导致一页中存储的键值减少,指针也跟着减少,要保存同样的大量数据,只能增加树的高度,导致性能降低
6、索引分类
聚集索引选取规则:
- 如果存在主键,主键索引就是聚集索引
- 如果不存在主键,将使用第一个唯一索引作为聚集索引
- 以上都没则InnoDB会自动生产一个rowId作为隐藏的聚集索引
聚集索引有且仅有一个,叶子结点上存储行数据
回表查询:先从二级索引查询到对应的主键值,再回到聚集索引查询行元素
7、索引语法
- 创建索引
CREATE [UNIIQUE | FULLTEXT] INDEX INDEX_NAME ON TABLE_NAME(col.......)
- 查看索引
SHOW INDEX FROM TABLE_NAME
- 删除索引
DROP INDEX INDEX_NAME ON TABLE_NAME
- 查看SQL执行频次
SHOW GLOBAL STATUS LIKE 'Com_%'
- 慢查询日志
SHOW VARIABLES LIKE 'slow_query_log'