索引是什么
- mysql索引: 是一种帮助mysql高效的获取数据的数据结构,这些数据结构以某种方式引用数据,这种结构就是索引。可简单理解为排好序的快速查找数据结构。如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。
索引分类
- 单值索引:一个索引包含1个列 create index idx_XX on table(f1) 一个表可以建多个。
- 唯一索引: 索引列的值必须唯一,但允许有空值 create unique index idx_XX on table(f1)
- 复合索引: 一个索引包含多个列 如:create index idx_XX on table(f1,f2,..)
索引结构
- BTree
- Hash索引
- full-text全文索引:
什么情况建立索引
- 主键自动建立唯一索引
- 频繁作为查询条件的字段因该创建索引
- 查询中与其他表关联的字段,外键关系建立索引
- 频繁更新的字段不适合建立索引
- where条件里用不到的字段不建立索引
- 单键/复合索引的选择(高并发下倾向复合)
- 查询中排序的字段因建立索引
- 查询中统计或分组字段
什么情况建不立索引
- 频繁增删改的表
- 表记录太少
- 数据重复且分布平均的表字段。(重复太多索引意义不大)
sql优化
可以参考:mysql的sql优化