SQL语句常见优化方法
Sql优化方法
- 先进行选择运算(where limit)再进行连接运算
- where子句中应把过滤性最强的条件放在最前面
- where子句中字段的顺序应和组合索引中字段顺序一致
- 使用索引
- 使用覆盖索引来避免表查询
- 对于重复的计算和相同的子查询考虑使用表变量或临时表保存
- 尽量不要在列上进行运算或使用函数
- 借助执行计划分析sql
查看sql执行计划
在查询语句前使用EXPLAIN关键字
变体: EXPLAIN EXTENDED SELECT …… SHOW WARNINGS;(查看优化后的语句)

常见慢sql
- 对数据量很大的表做简单查询
- 多个表连接查询
简单优化手段
- 使用索引
- 分页查询
连接方式优化
连接查询介绍
join (自然连接或等值连接)
方式一: select * from a join b using();// 两张表有相同的字段
方式二: select * from a join b on… 同 select * from a , b where…
不带连接条件会把所有数据读到内存大小为a.count*b.count,使用using的时候用于连接的字段只会显示一列,条件放在on和where里是等价的
inner join 与join等价
select * from a inner join b on…
left join 和right join(左连接、右连接)
select * from a left join b on…
on是生成临时表的条件,where是对临时表过滤的条件
连接查询伪代码

连接查询优化方法
- left join 和 inner join选择
- 筛选条件尽可能写在on子句
- 嵌套连接优化内层查询,减少join表个数,先join数据量小的表
- 尽量使用主键或索引字段关联表
优化例子


使用IDX_USERID_GOODSNO后耗时0.093s

使用IDX_USERID_GOODSNO后耗时0.037s

例子来源于项目数据
SQL语句常见优化方法的更多相关文章
- Oracle SQL语句性能优化方法大全
Oracle SQL语句性能优化方法大全 下面列举一些工作中常常会碰到的Oracle的SQL语句优化方法: 1.SQL语句尽量用大写的: 因为oracle总是先解析SQL语句,把小写的字母转换成大写的 ...
- SQL语句常见优化十大案例
1.慢SQL消耗了70%~90%的数据库CPU资源: 2.SQL语句独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低:3.SQL语句可以有不同的写法: 1 ...
- SQL语句的优化方法
减少对数据库的查询次数 尽量使用相同的或非常类似的SQL语句进行查询 避免不带任何条件的SQL语句的执行 sql语句用大写 别名的使用(1.5倍)
- MySQL中SQL语句常见优化策略
1.避免全表扫描 对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引. 2.避免判断null 值 应尽量避免在where 子句中对字段进行null 值判 ...
- Mysql性能优化一:SQL语句性能优化
这里总结了52条对sql的查询优化,下面详细来看看,希望能帮助到你 1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2,应尽量避免在 w ...
- Oracle数据库的sql语句性能优化
在应用系统开发初期,由于开发数据库数据比较少,对于查询sql语句,复杂试图的编写等体会不出sql语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目 ...
- Mysql 52条SQL语句性能优化策略汇总
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引. 2.应尽量避免在where子句中对字段进行null值判断,创建表时NULL是默认值,但大多数时候应 ...
- SQL语句性能优化策略
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 WHERE 及 ORDER BY 涉及的列上建立索引.2.应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,创建表时 NULL 是默认 ...
- 52 条 SQL 语句性能优化策略,建议收藏
本文会提到 52 条 SQL 语句性能优化策略. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引. 2.应尽量避免在where子句中对字段进行nul ...
随机推荐
- jenkins遇到含中文路径的SVN地址时认证通不过
安装插件:http://mirror.xmission.com/jenkins/plugins/subversion/2.5/subversion.hpi 可以解决svn中文目录问题 百度云:http ...
- Django---简单接受表单信息
普通接受信息: 接受单选的值:例如:input select 等提交过来的信息 u = request.POST.get('username',None) 接受多选: h = request.POST ...
- R排序sort、order、rank、arrange
Ø sort sort(x, decreasing = FALSE, ...) ## Default S3 method: sort(x, decreasing = FALSE, na.last = ...
- 对于Python中回调函数的理解
关于回调函数,网上有很多说明和各种解释,多数在尝试用语言描述.我认为,如果对各个角色之间的关系不清楚,如果没有相关的编程需求,那么语言便非常无力,很难理解. 这是360百科的解释: 在计算机程序设计中 ...
- Kettle 4.2源码分析第一讲--Kettle 简介
Pentaho Data Integration(PDI)简介 1. PDI结构简介 图 1‑1 PDI核心组件 Spoon是构建ETL Jobs和Transformations的工具.Spoon可以 ...
- MySQL在linux上的source code安装方法(configure)
1.建立操作系统用户和组 [root@faspdev ~]# groupadd mysql [root@faspdev ~]# useradd -g mysql mysql 2.解压安装文件,进入解压 ...
- 关于LeNet-5卷积神经网络 S2层与C3层连接的参数计算的思考???
https://blog.csdn.net/saw009/article/details/80590245 关于LeNet-5卷积神经网络 S2层与C3层连接的参数计算的思考??? 首先图1是LeNe ...
- 滑雪---poj1088(动态规划+记忆化搜索)
题目链接:http://poj.org/problem?id=1088 有两种方法 一是按数值大小进行排序,然后按从小到大进行dp即可: #include <iostream> #incl ...
- 2015 湘潭大学程序设计比赛(Internet)H题-括号匹配
括号匹配 Accepted : 30 Submit : 234 Time Limit : 10000 MS Memory Limit : 65536 KB 题目描述 有一串括号(只包含&quo ...
- django时间的时区问题
在用django1.8版本做项目的时候遇到时间的存储与读取不一致的问题,网上找了很多帖子,但都没有讲明白.本文将在项目中遇到的问题及如何解决的尽可能详细的记录下来,当然本文参考了网上大量相关文章. 在 ...