SQL语句优化
目录
一、前言
二、什么是好的SQL语句
三、SQL语句执行原理
1、执行过程
2、写法顺序
3、SQL缓存
四、SQL语句编写注意问题
1.对查询进行优化
2.应尽量避免在 where 子句中对字段进行 null 值判断
3.应尽量避免在 where 子句中使用 != 或 操作符
4.应尽量避免在 where 子句中使用 or 来连接条件
5.in 和 not in 也要慎用,否则会导致全表扫描
7.如果在 where 子句中使用参数,也会导致全表扫描
8.应尽量避免在 where 子句中对字段进行表达式操作
9.应尽量避免在where子句中对字段进行函数操作
五、总结
一、前言
80%的数据库性能问题都是由于糟糕的SQL语句造成的,系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的 SQL语句,提高系统的可用性。
二、什么是好的SQL语句
- 尽量简单,模块化
- 易读、易维护
- 节省资源、内存、CPU
- 扫描的数据块要少
- 少排序
- 不造成死锁
三、SQL语句执行原理
1、执行过程
from clause ---> where clause ---> select ---> group by ---> having ---> order by ---> limit
2、写法顺序
select ---> from clause ---> where clause ---> group by ---> having---> order by ---> limit
3、SQL缓存
SELECT语句默认查询后会被缓存,方便下次查询
查询sql缓存是否开放
show global variables like 'query%';
四、SQL语句编写注意问题
1.对查询进行优化
要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引
2.应尽量避免在 where 子句中对字段进行 null 值判断
否则将导致引擎放弃使用索引而进行全表扫描,如
select id from stu where num is null;
最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库.
备注、描述、评论之类的可以设置为 NULL,其他的,最好不要使用NULL。
不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num = 0
3.应尽量避免在 where 子句中使用 != 或 操作符
否则引擎将放弃使用索引而进行全表扫描
4.应尽量避免在 where 子句中使用 or 来连接条件
如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描
5.in 和 not in 也要慎用,否则会导致全表扫描
7.如果在 where 子句中使用参数,也会导致全表扫描
因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。
8.应尽量避免在 where 子句中对字段进行表达式操作
这将导致引擎放弃使用索引而进行全表扫描
9.应尽量避免在where子句中对字段进行函数操作
这将导致引擎放弃使用索引而进行全表扫描
五、总结