1.索引是啥?
简单来说是可以快速查找数据的数据结构。
数据结构就是存储数据的结构,例如数组,链表...
在数据库系统中还维护着满足特定查找算法的数据结构,这些数据结构以某种引用指向表中是数据,这些数据结构就是索引,它让我们可以用算法来查找数据。
假设有个user表,通过name字段找李白,没有索引的话就会全表扫描,从头到尾遍历完,数据多的时候效率很低;有了索引就像有了目录。
2.索引好不好?
可以提高检索效率,降低IO成本,降低排序成本,降低CPU的消耗;
索引是要占空间的,对表更新的时候MySQL不仅要更新数据,还要更新索引信息,保存索引文件。
总的来说查询效率提升了,更新(增删改)效率降低了。
3.要不要建索引?
创建索引的情况
(1)主键自动建立唯一索引;
(2)频繁作为查询条件的字段应该创建索引(where后面的语句);
(3)查询中与其他表关联的字段,外键关系建立索引;
(4)多字段查询下倾向创建组合索引;
(5)排序字段通过索引访问大大提高排序速度;
(6)查询中统计或者分组字段。
不推荐索引的情况
(1)表记录太少;
(2)经常增删改的表;
(3)where条件里用不到的字段不要索引。
4.索引类型四种
可以随表创建,也可以单独创建;
5.怎么看SQL语句的性能?
explain关键字,重点看type、key、rows、extra
type里
extra里
尽量避免Using filesort(排序时没使用索引)Using temporary(分组时没使用索引)的出现;
6.性能不行怎么优化?