SQL语句优化

06-27 1545阅读

目录

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子句中对字段进行函数操作

    这将导致引擎放弃使用索引而进行全表扫描

     五、总结

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]