SQL优化
2021/9/7 2:07:58
本文主要是介绍SQL优化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
SQL优化
- 任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。
- in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3) #对于连续的数值,能用 between: select id from t where num between 1 and 3
也可以使用 exits 或 not exits 来代替
- 对查询,首先应考虑在 where 及 order by 涉及的列上建立索引,应尽量避免全表扫描。
- 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
- 应尽量避免在 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
-
优化索引失效问题。 链接:索引失效的情况
-
用TRUNCATE替代DELETE
-
连接比子查询的效率高
-
用Where子句替换HAVING子句
--NO.1 IN的写法 SELECT * FROM TABLEA A WHERE A.ID IN ( SELECT ID FORM TABLEB B WHERE B.ID>1) --NO.2 exists 写法 SELECT * FROM TABLEA A WHERE EXISTS ( SELECT 1 FROM TABLEB B WHERE A.ID=B.ID AND B.ID>1)
- 用EXISTS替换DISTINCT
- 在java代码中尽量少用连接符“+”连接字符串!
- 通常避免在索引列上使用NOT
- 用>=替代>两者的区别在于, 前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录.
- 避免在索引列上使用IS NULL和IS NOT NULL
- 用UNION-ALL 替换UNION ( 如果有可能的话)
- 当只需要一条数据的时候,使用limit 1。这是为了,使EXPLAIN中type列达到const类型
- 不使用ORDER BY RAND()
- 使用合理的分页方式以提高分页的效率
select id,name from product limit 866613, 20
- .应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null #可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0
这篇关于SQL优化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-29RocketMQ底层原理资料详解:新手入门教程
- 2024-11-29RocketMQ源码资料解析与入门教程
- 2024-11-29[开源]6.1K star!这款电视直播源神器真的太赞啦!
- 2024-11-29HTTP压缩入门教程:轻松提升网页加载速度
- 2024-11-29JWT开发入门指南
- 2024-11-28知识管理革命:文档软件的新玩法了解一下!
- 2024-11-28低代码应用课程:新手入门全攻略
- 2024-11-28哪些办公软件适合团队协作,且能够清晰记录每个阶段的工作进展?
- 2024-11-28全栈低代码开发课程:零基础入门到初级实战
- 2024-11-28拖动排序课程:轻松掌握课程拖动排序功能