数据库SQL优化总结(续)

本文结合《SQL调优与报表性能优化》一文,整理并分享了工作实践中的SQL优化经验,包括基本思想、优化方法及注意事项。通过减少数据库访问次数、合理使用索引、避免特定操作等手段,实现SQL执行效率的提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

曾写过一篇《SQL调优与报表性能优化》的文章,今天结合那篇文章把前段时间工作中的一些认识和网上收集别人的经验重新总结整理一下,作为上一篇SQL优化的续篇,分享出来,希望对看到的人有所帮助。同时欢迎拍砖大笑

一、SQL优化的基本思想:

1、  最小化结果集数据量。

Sql所需处理的资源总量/Sql单位时间所能处理的资源量=Sql执行时间

所以为减少Sql执行时间:

(1)可以增大Sql单位时间所能处理的资源量。

(2)可以减少Sql所需处理的资源总量。

常见的是方法(2),即减少Sql所需处理的资源总量,就是减少执行sql所处理的行数。

2、  减少全表扫描。

减少全表扫描,主要手段就是建立索引,索引就好比一本书的目录,当你需要查询某篇文章时,不需要从头到尾把书的每页都查一遍,直接看目录就能找到了。

在没有建索引的情况下,从数据库查找某一条数据,就必须进行全表扫描,即对所有数据进行一次遍历。但即使在建立了索引的情况下,也会出现类似情况发生,因此要尽量避免全表扫描。

二、优化方法:

结合上面两点,总结如下:

1、  尽量减少对数据库的访问次数。

多次连接数据库会消耗大量时间,能用一句SQL查出来的尽量不要使用多个SQL查。

2、尽量把使用索引的列放在where条件首列。

3、不要过多地使用通配符*,而是使用查询列。

4、避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描。

考虑将null的列设置默认值0.

5、尽量避免在where子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

6、避免在where子句中使用or来连接条件,否则将导致引擎放弃使用索引而进行全表扫描。

7、in和not in也要慎用,IN会使系统无法使用索引,而只能直接搜索表中的数据。

考虑使用between … and …

8、尽量避免在索引过的字符数据中,使用非打头字母搜索。这也使得引擎无法利用索引。

SELECT * FROM table1 WHERE col1 LIKE ‘%L%’

改为:

SELECT * FROM table1 WHERE col1 LIKE ‘L%’ 

9、尽量避免在 where 子句中对字段进行表达式操作,不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算

SELECT * FROM table1 WHERE col1/2=100 

10、在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。

11、尽量把使用的索引放在选择的首列。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值