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%'

版权声明:本文博主原创文章,博客,未经同意不得转载。

时间: 2024-12-30 21:37:23

SQL优化策略高级优化经常使用-1(The Return Of The King)的相关文章

Unity3d iOS基本优化和高级优化

原地址:http://www.cocoachina.com/bbs/read.php?tid=70395&page=1 分享看见的2篇好文.简单翻译了一下并且放出原文http://www.cratesmith.com/archives/1831.做减法大量代码在Update()或FixedUpdate()中做处理,意味着无论代码的执行速度如何,都将在每次帧刷新的时候调用到, 复制代码 public class MyHoming : MonoBehaviour { public void Upda

Spark SQL 优化策略

查询优化是传统数据库中最为重要的一环,这项技术在传统数据库中已经很成熟.除了查询优化, Spark SQL 在存储上也进行了优化,从以下几点查看 Spark SQL 的一些优化策略. (1)内存列式存储与内存缓存表       Spark SQL 可以通过 cacheTable 将数据存储转换为列式存储,同时将数据加载到内存进行缓存. cacheTable 相当于在分布式集群的内存物化视图,将数据进行缓存,这样迭代的或者交互式的查询不用再从 HDFS 读数据,直接从内存读取数据大大减少了 I/O

Android性能优化策略

本篇主要是对 google推出的性能优化典范 进行一个通篇的整理- 主要在于一些具体的优化技巧.至于 60fps.掉帧.gc.内存抖动.阈值-等等这些性能术语的概念里面不做多概括,请自行查阅- 本篇从以下几点延伸扩展- 绘制/渲染 优化布局的结构 避免复杂的View层级.布局越复杂就越臃肿,就越容易出现性能问题,寻找最节省资源的方式去展示嵌套的内容: 尽量避免在视图层级的顶层使用相对布局 RelativeLayout .相对布局 RelativeLayout 比较耗资源,因为一个相对布局 Rel

JDBC优化策略总结

相比Hibernate.iBatis.DBUtils等,理论上JDBC的性能都超过它们.JDBC提供更底层更精细的数据访问策略,这是Hibernate等框架所不具备的. 在一些高性能的数据操作中,越高级的框架越不适合使用.这里是我在开发中对JDBC使用过程中一些优化经验总结. 1.选择纯Java的JDBC驱动. 2.使用连接池--使用一个"池"来管理JDBC连接,并精心调试池配置的参数,目前可用的数据库连接池很多很多.如何配置合适的参数呢,需要的是测试,而不是感觉. 3.重用Conne

Spark性能优化指南——高级篇

Spark性能优化指南--高级篇 [TOC] 前言 继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为<Spark性能优化指南>的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问题. 数据倾斜调优 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能. 数据倾斜发生时的现象 绝大多数tas

mysql索引使用策略及优化

原文地址:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 索引使用策略及优化 MySQL的优化主要分为结构优化(Scheme optimization)和查询优化(Query optimization).本章讨论的高性能索引策略主要属于结构优化范畴.本章的内容完全基于上文的理论基础,实际上一旦理解了索引背后的机制,那么选择高性能的策略就变成了纯粹的推理,并且可以理解这些策略背后的逻辑. 示例数据库 为了讨论索引策略,需

SQL业务审核与优化

审核   什么是业务审核 类似与code review 评审业务Schema和SQL设计 偏重关注性能 是业务优化的主要入口之一 审核提前发现问题,进行优化 上线后通过监控或巡检发现问题,进行优化 Schema设计审核 表和字段命名是否合规 字段类型,长度设计是否适当 表关联关系是否合理 主键,更新时间保留字段等是否符合要求 约束,默认值等配置是否恰当 了解业务,表数据量,增长模式 数据访问模式,均衡度 根据业务需求,表是否需要分区,是否有数据什么周期 SQL语句审核 SQL语句的执行频率 表上

SQL通用优化方案(where优化、索引优化、分页优化、事务优化、临时表优化)

SQL通用优化方案:1. 使用参数化查询:防止SQL注入,预编译SQL命令提高效率2. 去掉不必要的查询和搜索字段:其实在项目的实际应用中,很多查询条件是可有可无的,能从源头上避免的多余功能尽量砍掉,这是最简单粗暴的解决方案.3. 选择最有效率的表名顺序: 数据库的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表放在最后,如果有3个以上的表连接查询,那就需要选择那个被其他表所引用的表放在最后.

【转载】Spark性能优化指南——高级篇

前言 数据倾斜调优 调优概述 数据倾斜发生时的现象 数据倾斜发生的原理 如何定位导致数据倾斜的代码 查看导致数据倾斜的key的数据分布情况 数据倾斜的解决方案 解决方案一:使用Hive ETL预处理数据 解决方案二:过滤少数导致倾斜的key 解决方案三:提高shuffle操作的并行度 解决方案四:两阶段聚合(局部聚合+全局聚合) 解决方案五:将reduce join转为map join 解决方案六:采样倾斜key并分拆join操作 解决方案七:使用随机前缀和扩容RDD进行join 解决方案八:多