当前位置: 首页 > 图灵资讯 > 技术篇> MySQL索引优化

MySQL索引优化

来源:图灵教育
时间:2023-05-21 09:19:49

1.什么是索引?

简单地说,数据结构可以快速找到。

数据结构是存储数据的结构,如数组和链表...

满足特定搜索算法的数据结构也维护在数据库系统中。这些数据结构以某种引用指向表中的数据为索引,使我们能够用算法搜索数据。

MySQL索引优化_sql索引优化

假设有一个user表,通过name字段找到李白。如果没有索引,它将从头到尾扫描整个表。当有很多数据时,效率很低;有索引就像有一个目录。

2.索引好吗?

可提高检索效率,降低IO成本,降低排序成本,降低CPU消耗;

索引是占用空间的,MySQL不仅要更新数据,还要更新索引信息,保存索引文件。

一般而言,查询效率提高,更新(增删)效率降低。

3.要不要建索引?

创建索引的情况

(1)主键自动建立唯一索引;

(2)频繁作为查询条件的字段应创建索引(where后面的句子);

(3)查询中与其他表相关的字段,建立外键关系索引;

(4)多字段查询倾向于创建组合索引;

(5)通过索引访问排序字段大大提高排序速度;

(6)查询中的统计或分组字段。

不推荐索引

(1)表记录太少;

(2)经常增删的表格;

(3)不要索引where条件下不能使用的字段。

4.四种索引类型

可以随表创建,也可以单独创建;

MySQL索引优化_字段_02

MySQL索引优化_字段_03

5.SQL语句的性能如何?

关键词explain,重点关注type、key、rows、extra

type里

MySQL索引优化_数据_04

MySQL索引优化_数据_05

extra里

尽量避免Using filesort(排序时不使用索引)Using temporary(分组时不使用索引)的出现;

6.性能不好怎么优化?

不要让索引失效;

违反最佳左前缀规则

从索引的最左开始;

MySQL索引优化_数据结构_06

而且不能跳过,跳过age后score也没有使用索引,只有sname使用索引;

MySQL索引优化_数据_07

计算索引列或函数会导致索引失效,成为全表扫描;

MySQL索引优化_字段_08

使用范围后,范围右侧的列索引将失效;score索引不生效;

MySQL索引优化_字段_09

不能使用不等于!=,is not null;

使用like以通配符%开头会使索引失效,但通配符在后面不会;

字段_10

MySQL索引优化_数据_11

或者连接也会使索引失效。

MySQL索引优化_sql索引优化_12

7.联表查询优化

初始

左外连接是左表的主表(class),class是驱动表,book是驱动表;

MySQL索引优化_数据_13

优化:

主表数据量小,因为主表只能扫描整个表,然后索引驱动表的字段;

MySQL索引优化_字段_14

MySQL索引优化_数据_15

综上所述:内连接时大表加索引,外连接时小表为主表,大表加索引。