sql优化
https://www.bilibili.com/video/BV1KW411u7vy?p=19
1、索引的定义:
是帮助数据库高效获取数据的数据结构
排好序的快速查找数据结构
2、结构
首先说一点,mysql索引的数据结构就是用到的 B树 B+树 hash树。
没有特殊说明的是采用 B树,其中的聚集索引、覆盖索引、复合索引、唯一索引是采用B+树。
B+树的特征:
1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。
B+树的优势:
1.单一节点存储更多的元素,使得查询的IO次数更少。
2.所有查询都要查找到叶子节点,查询性能稳定。
3.所有叶子节点形成有序链表,便于范围查询。
3、索引目的
提高查询效率,类似字典
4、存储
索引本身也很大,存储到磁盘上。
5、索引优势劣势
优势:提高查询效率,降低IO成本
降低排序成本,减少CPU消耗
劣势:索引也会占用空间
查询会快,但是修改和添加会变慢
有大量数据的表,需要花时间研究优秀的数据索引,优化索引
6、索引分类
单列索引:一个索引单个列 一个表可以有多个单列索引,但单列索引最好不要超过5个
唯一索引:索引列中的值必须是唯一的,但是允许为空值。unique
复合索引:一个索引可以有多个列
7、语法
添加:create [unique] index indexname on tablename (columname(length)....)
alter table add [unique] index indexname on tablename (columname(length)....)
删除:drop index [indexname] on tablename
查看:show index from tablename
create unique index myindex2 on constantitem(constantName,constantCode)
show index from constantitem
drop index name1 on constantitem
哪些适合建索引
1、主键自动索引
2、经常做为查询条件的字段
3、查询中与其他表关联的字段(外键)
4、单键还是组合,高并发下倾向于建组合索引
5、排序的字段
6、统计或分组的字段
哪些不适合建索引
1、表记录太少(2000条以下不用建)
2、频繁更新的字段
3、数据重复且分布平均的字段
3、where条件里用不到的