SQL优化策略高级优化经常使用-1(The Return Of The King)
1 经常使用的优化策略
1.1 语句
1.1.1使用实际的列名
当我们查询SQL语句时。你是否觉得使用实际的列名比使用*更快呢?答案是肯定的。
为了证实这一点,感兴趣的朋友能够自己验证一下。我这里给出一个实例。
select * from user;
--时间: 0.423ms</span>
select id,version,avatar,date_created,description,email,email_show
,enabled,first_name,last_name,last_updated,member_id,passwd
,user_real_name,user_style_id ,username,paypal_email_address
,transaction_fee_payer,pay_pal_email_address
from user;
--时间: 0.177ms
1.1.2 合理使用Having
要理解Having的使用含义,它仅使用在对全部查询到的行数进行过滤。即。它就是一个过滤器。
不要将Having用作其他目的。
SELECT subject, count(subject)
FROM student_details
WHERE subject != 'Science'
AND subject != 'Maths'
GROUP BY subject
取代以下不合理的使用方法:
SELECT subject, count(subject)
FROM student_details
GROUP BY subject
HAVING subject!= 'Vancouver' AND subject!= 'Toronto'
1.1.3 降低子查询个数
降低子查询个数能够降低不必要的性能消耗。看看以下的这里简单实例。
SELECT name
FROM employee
WHERE (salary, age ) = (SELECT MAX (salary), MAX (age)
FROM employee_details)
AND dept = 'Electronics'
取代以下这个语句
SELECT name
FROM employee
WHERE salary = (SELECT MAX(salary) FROM employee_details)
AND age = (SELECT MAX(age) FROM employee_details)
AND emp_dept = 'Electronics'
经常使用的优化提示:
1.合理的使用Exits, In ,Joinkeyword。
2.In一般会减少SQL的运行效率,当过滤标准在字查询中时,In的使用会提高运行效率;当大部分的过滤标准在住查询中时。Exits运行效率比較高。
比方以下的这个样例:
Select *from product p
where EXISTS (select 1 from order_items o
where o.product_id = p.product_id)
取代以下这个SQL语句
Select * from product p
where product_id IN
(select product_id from order_items)
3 使用Exits替代 Distinct。
当表之间存在一对多的关系时,使用Exits会比使用Distinct效率更高。
SELECTd.dept_id, d.dept
FROM dept d
WHERE EXISTS ( SELECT 'X' FROM employee e WHEREe.dept = d.dept)
取代以下的SQL语句
SELECT DISTINCT d.dept_id, d.dept
FROM dept d,employee e
WHERE e.dept = e.dept
4 差别UNION ALL 和UNION的差异
5 优化where查询条件。
看以下的这个样例,比較中。你会发现性能的差异。
selectid,email,first_name,last_name from user where first_name like 'Sha%'
--时间: 0.032ms</span>
<span style="font-size:18px;">selectid ,email ,first_name ,last_name from user where substr(first_name, 1, 3 ) ='Sha'
--时间: 0.035ms
实例2
SELECT product_id, product_name
FROM product
WHERE unit_price BETWEEN MAX(unit_price) and MIN(unit_price)
取代以下的SQL语句
SELECT product_id, product_name
FROM product
WHERE unit_price >= MAX(unit_price)
and unit_price <= MIN(unit_price)
1.1.4 使用 DECODE
使用Decode函数避免扫描同样的行或者连接反复同样的表。Decode常使用在Group By的SQL语句中。
SELECT idFROM employee
WHERE nameLIKE 'Ramesh%'
andlocation = 'Bangalore'
代替以下SQL语句
SELECT DECODE(location,'Bangalore',id,NULL) id FROMemployee
WHERE name LIKE 'Ramesh%'
版权声明:本文博主原创文章,博客,未经同意不得转载。
SQL优化策略高级优化经常使用-1(The Return Of The King)的更多相关文章
- Unity3d iOS基本优化和高级优化
原地址:http://www.cocoachina.com/bbs/read.php?tid=70395&page=1 分享看见的2篇好文.简单翻译了一下并且放出原文 http://www.c ...
- JVM(1)---虚拟机在运行期的优化策略
1.解释器与JIT编译器 首先我们先来了解一下运行在虚拟机之上的解释器与JIT编译器.当我们的虚拟机在运行一个java程序的时候,它可以采用两种方式来运行这个java程序: 采用解释器的形式,也就是说 ...
- SQL高级优化(一)之MySQL优化
不同方案效率对比 MySQL各字段默认长度(一字节为8位) 整型: TINYINT 1 字节 SMALLINT 2 个字节 MEDIUMINT 3 个字节 INT 4 个字节 INTEGER 4 个字 ...
- Spark SQL概念学习系列之Spark SQL 优化策略(五)
查询优化是传统数据库中最为重要的一环,这项技术在传统数据库中已经很成熟.除了查询优化, Spark SQL 在存储上也进行了优化,从以下几点查看 Spark SQL 的一些优化策略. (1)内存列式存 ...
- 47、Spark SQL核心源码深度剖析(DataFrame lazy特性、Optimizer优化策略等)
一.源码分析 1. ###入口org.apache.spark.sql/SQLContext.scala sql()方法: /** * 使用Spark执行一条SQL查询语句,将结果作为DataFram ...
- MySQL中的SQL的常见优化策略
MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 1 避免全表扫描对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索 ...
- SQL高级优化系列
目录 SQL高级优化系列(一)之MySQL优化 SQL高级优化系列(二)之MySQL架构 SQL高级优化系列(三)之存储引擎 SQL高级优化系列(四)之SQL优化 SQL高级优化系列(五)之执行计划 ...
- SQL高级优化(六)之MySQL索引
一.索引概述 1. 索引的优点 为什么要创建索引?这是因为,创建索引可以大大提高系统的查询性能.如果不使用索引,查询时从第一行开始查询.如果使用了索引,所以就可以更加快速的找到希望的数据. 第一. ...
- SQL高级优化(四)之SQL优化
SQL优化 一.SQL优化简介 解释:对于特定的要求,使用更有的SQL策略或索引策略,以达到让结果呈现的时间更短,从而提升操作效率的过程就是SQL优化. SQL优化包含在数据库级别优化中.我们平常所说 ...
随机推荐
- 强势围观,CSDN代码引用bug
看我写的一篇blog http://blog.csdn.net/laijieyao/article/details/41014355,在代码上引用了微软雅黑的字体,结果代码显示出来把我给惊呆了 竟然 ...
- android_重写button样式
这样的button样式应该源自IOS.假设安卓上实现,则须要使用android上面的layer-list来实现. 事实上layer-list有点像framlayout,作用就是覆盖. 先说一下实现原理 ...
- 3DMax的OFusion插件使用问题
使用OFusion将3D max场景导出为Ogre的Mesh是非经常常使用的方法.这里汇总一些问题方便查阅. 1.OFusion获取: http://download.csdn.net/detail/ ...
- 2014牡丹江——Hierarchical Notation
problemId=5380" style="background-color:rgb(51,255,51)">题目链接 字符串模拟 const int MAXN ...
- WordPress更改固定链接出现404的解决方案
很多站长在玩WordPress的时候,可能会碰到一个问题,就是想把WordPress伪静态,在后台设置好固定链接之后,就会出现文章页面或者所有的页面都出现404错误.解决方法如下: 1,.htacce ...
- Java EE (10) - 资源服务器的整合
加密(Encryption)和数字签名(Digital Signature)通常被用于保护通讯--加密用来防止数据传输过程中的窃听--数字签名用来防止数据传输过程中的篡改 JDBC: 整合关系型数据库 ...
- hdu1664 Different Digits
求出n的倍数m,要求m使用的不同数字最少,且最小. 一开始不知道怎么搜,因为不知道m由多少个不同的数字组成. 然后百度了一下,看到和数论有关. m可能使用的数字的个数可能为一个或者两个 a,aa,aa ...
- ByteBuffer的allocate和allocateDirect
在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类.ByteBuffer提供了两种静态实例方式: public stati ...
- 蚁群算法和简要matlab来源
1 蚁群算法原理 从1991由意大利学者 M. Dorigo,V. Maniezzo 和 A. Colorni 通过模拟蚁群觅食行为提出了一种基于群体的模拟进化算法--蚁群优化.极大关注,蚁群算法的特 ...
- (二十)unity4.6得知Ugui中国文献-------另外-InputModules
大家好.我是太阳广东. 转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unitym ...