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.性能不好怎么优化?
不要让索引失效;
违反最佳左前缀规则
从索引的最左开始;
而且不能跳过,跳过age后score也没有使用索引,只有sname使用索引;
计算索引列或函数会导致索引失效,成为全表扫描;
使用范围后,范围右侧的列索引将失效;score索引不生效;
不能使用不等于!=,is not null;
使用like以通配符%开头会使索引失效,但通配符在后面不会;
或者连接也会使索引失效。
7.联表查询优化
初始
左外连接是左表的主表(class),class是驱动表,book是驱动表;
优化:
主表数据量小,因为主表只能扫描整个表,然后索引驱动表的字段;
综上所述:内连接时大表加索引,外连接时小表为主表,大表加索引。