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 ...
随机推荐
- 一个简单web系统的接口性能分析及调优过程
在测试一个简单系统接口性能压力时,压到一定数量,程序总是崩溃,查看相关机器相关数据时,CPU.内存.IO占用均不高,问题自然出现在其它地方先介绍下系统部件架构 Resin版本为:[root@local ...
- iOS - Charles抓包数据
一.Charles Charles破解版下载地址点我 1.1 Charles主要的功能 .截取Http.Https网络请求内容 .支持修改网络请求参数,方便调试 .支持网络请求的截取 并动态修改 1. ...
- SQL Fundamentals: Using Single-Row Functions to Customize Output使用单行函数自定义输出
SQL Fundamentals || Oracle SQL语言 DUAL is a public table that you can use to view results from functi ...
- AIX 7命令行weblogic建域流水
$ ./config.shUnable to instantiate GUI, defaulting to console mode. <------------------- Fusion M ...
- MySQL复制原理
mysql从3.23开始提供复制功能,复制指将主库的ddl和dml操作通过binlog文件传送到从库上执行,从而保持主库和从库数据同步.mysql支持一台主库同时向多台从库复制,从库同时也可以作为其他 ...
- 特征向量-Eigenvalues_and_eigenvectors#Graphs 线性变换
总结: 1.线性变换运算封闭,加法和乘法 2.特征向量经过线性变换后方向不变 https://en.wikipedia.org/wiki/Linear_map Examples of linear t ...
- 可视化url
http://blog.csdn.net/u011532367/article/list/1
- js实现点击div以外区域,隐藏div区域
<body style="text-align:center;"> <input type="text" style="width: ...
- NYOJ 587 blockhouses 【DFS】
blockhouses 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 Suppose that we have a square city with straigh ...
- [django]Django model中数据批量导入bulk_create()
参考: https://www.cnblogs.com/ccorz/p/Django-model-zhong-shu-ju-pi-liang-dao-rubulkcreat.html import o ...