sql语句优化的几种方法,你知道几个?

xzdxmynet 发布于 2024-01-25 阅读(107)

小编给大家分享一下SQL语句的优化方法。 相信大多数人对此还不是很了解,所以分享这篇文章供大家参考。 希望您读完这篇文章后能有所收获。 让我们一起来了解一下吧!

优化SQL语句的方法有以下几种: 1、统一SQL语句的格式; 2、优化查询,避免全表扫描; 3、保持SQL语句简洁; 4.考虑使用“临时表”来临时存储中间结果。 ; 5、尽量避免大额交易操作; 6.尽量避免向客户端返回大量数据。

sql语句的优化方法有哪些

在我们开发项目初期,由于业务数据量比较少,一些SQL的执行效率对程序运行效率的影响并不明显,开发和运维人员无法判断多少SQL会影响程序的运行效率,所以很少对SQL进行专门的优化。 随着时间的积累和业务数据量的增加,SQL执行效率对程序运行效率的影响逐渐增大。 这时候就需要对SQL进行优化。

sql语句优化的几种方法:

1.统一SQL语句格式

很多人认为下面两条SQL语句是相同的,但是数据库查询优化器却认为它们是不同的。

● * 来自双

● * 来自双

虽然它们只是大小写不同,但查询分析器认为它们是两个不同的 SQL 语句,必须解析两次。 生成2个执行计划。 所以,作为一名程序员,应该保证同一个查询语句在各处都是一致的,哪怕多一个空格也行不通!

2. 谨慎使用*,用特定的字段列表替换“*”,并且不返回任何未使用的字段。

3、优化查询,尽可能避免全表扫描

1)应该考虑对where和order by涉及的列创建索引

2)尽量避免对where子句中的字段进行空值判断,否则引擎会放弃使用索引而进行全表扫描,如:

select id from t where num is null

可以对num设置默认值0,确保表中num列不存在空值,然后像这样查询:

select id from t where num=0

3)尽量避免在where子句中使用!=或运算符,否则引擎将放弃使用索引并执行全表扫描。

4)尽量避免在where子句中使用or来连接条件,否则引擎会放弃使用索引而进行全表扫描,如:

select id from t where num=10 or num=20

你可以这样查询:

select id from t where num=10    
union all    
select id from t where num=20

5)谨慎使用in和not in,否则会导致全表扫描,如:

select id from t where num in(1,2,3)

对于连续值,如果可以,请不要使用 in:

select id from t where num between 1 and 3

6)合理使用like模糊查询

有时需要执行一些模糊查询,例如:

select * from contact where username like ‘%yue%’

关键字%yue%,由于yue前面使用了“%”,所以查询时必须扫描全表。 除非必要,不要在关键字前添加 %。

7)尽量避免对where子句中的字段进行表达式操作,这会导致引擎放弃使用索引而进行全表扫描。 喜欢:

select id from t where num/2=100

应改为:

select id from t where num=100*2

8)尽量避免对where子句中的字段进行函数操作,这会导致引擎放弃使用索引而进行全表扫描。 喜欢:

查询名称以abc开头的ID

select id from t where substring(name,1,3)='abc'

应改为:

select id from t where name like 'abc%'

4.用in代替

很多时候用in代替in是一个不错的选择,它只检查是否存在,性能比in好很多。例子:

select num from a where num in(select num from b)

替换为以下语句:

select num from a where exists(select 1 from b where num=a.num)

5、不要写太长或太冗余的SQL语句。 保持简洁。 如果可以用一个句子,就不要使用两个句子。

一般将语句的结果作为子集,然后从子集中进行查询。 这种一层嵌套语句比较常见,但根据经验,如果嵌套超过3层,查询优化器很容易给出错误的执行计划。 因为它惊呆了。 像人工智能这样的东西最终不如人类的分辨率。 如果人晕了,我敢保证数据库也会晕。

另外,执行计划是可以重用的,SQL语句越简单,被重用的可能性就越高。 复杂的SQL语句只要有一个字符发生变化,就必须重新解析,然后内存中就会塞满大量的垃圾。 可想而知数据库的效率会有多低。

6.考虑使用“临时表”来临时存储中间结果。

简化SQL语句的一个重要方法是使用临时表来临时存储中间结果。 然而,临时表的好处远不止这些。 如果将临时结果临时存储在临时表中,后续查询就会正确。 这样可以避免程序中的多次扫描。 主表还大大减少了程序执行过程中的“共享锁”阻塞和“更新锁”,减少阻塞,提高并发性能。

7、使用索引字段作为条件时,如果索引是复合索引,则必须使用索引中的第一个字段作为条件,以保证系统使用该索引。 否则,索引不会被使用,应尽可能使字段顺序与索引顺序一致。

8. 尝试使用数字字段。 如果字段只包含数字信息,尽量不要将其设计为字符字段。 这会降低查询和连接的性能,并增加存储开销。

这是因为引擎在处理查询和连接时会逐一比较字符串中的每个字符,而对于数字类型只需比较一次就足够了。

9、尽量用char代替char,因为首先变长字段的存储空间小,可以节省存储空间。 其次,对于查询来说,在相对较小的领域内搜索效率明显更高。

10.避免频繁创建和删除临时表,以减少系统表资源的消耗。

11.尽量避免使用游标,因为游标效率较低。 如果游标操作的数据超过10000行,就应该考虑重写。

12、尽量避免大事务操作,提高系统并发能力。

13.尽量避免向客户端返回大量数据。 如果数据量太大,就应该考虑相应的要求是否合理。

以上就是关于SQL语句优化方法的全部内容。 感谢您的阅读! 相信大家都有了一定的了解,希望分享的内容对大家有所帮助。 如果您想了解更多知识,请关注易速云行业资讯频道!

标签:  语句 索引 字段 查询 扫描 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。