SQL性能调优技巧

标签: sql 性能调优 技巧 | 发表时间:2014-02-28 23:49 | 作者:zzhonghe
出处:http://www.iteye.com

Data Model设计的Tip

 
1. 以三个范式为基础,业务的独立性和原子性拆分要合适,杜绝Key的冗余和不充分依赖
2. 对于有NULL值的时候,说明可以拆分为子类, 如果有互斥值,比如两个字段,如果A有值,那么B就不能有值
3. 隐藏的约束,某个Column为A值,那么另外一个Column就必须为B值,或者某个Column只能是1~20的值
4. 对于Boolean值,比如某个Flag Column,  Y/N, 其实可以考虑用更有意义的值来替代,比如Complete Date. 当然如果处于性能考虑的话不在此列。
 
 
高效访问DB的Tip
 
1.  java单独调用的语句,可以加上/**/Select ...的注释,方便在dbms_application_info中识别相应的语句
2. 减少于DB连接的次数,减少编译语句的次数, DB Pool,  PreparedStatement
3. 从最终的查询目标出发,查找数据。而不是从过程出发,查找数据
4. 不要动态建立数据库对象,比如索引,临时表,中间表等,都是不可取的。用GTtable是非常好的选择。
5. 修改数据库表数据,尽量用1条SQL搞定一批,而不是打开游标,然后update.  检索+处理+插入数据
6. 接近DB的核心来处理数据,速度越快,SQL>PLSQL>Java
7. 杜绝使用count(*),一定可以找得到替代的方式
8. 用NVL, NULLIF, Case When, Decode等语句来替代IF ELSE逻辑,处理速度要快些。
9. update + Case When, 可以合并多个update语句到1条里面
10. 慎用自定义的函数,特别是带有select语句的函数method,性能杀手,而且无法优化
11. where条件中用decode,一条语句查出多种记录。
12. 能不抛异常就别抛,不要在异常处理逻辑中加上业务
13. 基于源表对目标表做Insert,Update,Delete操作, 用Merge into...When Matched then Insert ... 
          http://www.cnblogs.com/lenxu/archive/2012/02/14/2350922.html
 
 
索引
 
1. 维护一个索引的开销,可能比一张表还要大,所以要精确设计索引,每个所以有是非常必须才添加
2. 如果一次获取的数据比较多,当超过表中数据总数的10%以上,那么是没有必要有索引,全表扫描可能更快
3. 索引指向的是某个数据块,而不是某条记录,所以紧凑的数据块结构能够获得更好的性能
4. 索引列上使用函数,会让索引失效,另外维护函数索引,成本会非常的高
5. 隐式的类型转换会让索引失效。 a=123  如果a是字符串,那么a上的索引会失效
6. 复合索引优于普通索引,1个索引可以适用多个场景使用,减少维护索引的数量
7. 逆序索引 Reverse Index,将key逆序后,再建索引,减少高并发的竞争资源,范围查询无效
8. 哈希索引,把key的值进行索引,提高并发性能,但是不能范围查。
 
 
SQL语句技巧
 
1. 关系操作有join, 非关系操作有group by, order by. 非关系操作需要临时的表空间进行存储
2. 单条数据查询响应时间要很快,努力让结果集和时间成正比
3. 复杂查询中尽量不用视图,可以会join到不需要的数据,不利于性能
4. exist用于子查询的情况是,父表数据少,子表数据多。in则是子表数据少,父表数据多的情况。  not exist和not in的场景与此类似
5. in的括号里面暗含了distinct和order by的操作,放置于内存。
6. Rank聚合函数
 

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [sql 性能调优 技巧] 推荐:

SQL性能调优技巧

- - 数据库 - ITeye博客
Data Model设计的Tip. 以三个范式为基础,业务的独立性和原子性拆分要合适,杜绝Key的冗余和不充分依赖. 对于有NULL值的时候,说明可以拆分为子类, 如果有互斥值,比如两个字段,如果A有值,那么B就不能有值. 隐藏的约束,某个Column为A值,那么另外一个Column就必须为B值,或者某个Column只能是1~20的值.

(转)针对MySQL的Linux性能调优技巧[翻译]

- - jackyrong
原文作者: Alexander Rubin,Percona 工程师. 原文连接:Linux performance tuning tips for MySQL. 为了方面阅读,我没依照原文按行逐句的进行翻译. 另外,我自己的扩充了一下基础知识点,很多知识点也是我第一次去学习,翻阅了一些资料. 原文中对Linux系统参数的优化主要分为文件系统、内存与swap、CPU三方面.

iOS应用性能调优的25个建议和技巧(转)

- - 移动开发 - ITeye博客
本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS  程序员. 这是他的个人网站: http://www.marcelofabri.com/,你还可以在Twitter上关注 @marcelofabri_. 性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会把他们的失望写满App Store的评论.

建议收藏!一次看完28个关于ES的性能调优技巧

- -
因为总是看到很多同学在说Elasticsearch性能不够好、集群不够稳定,询问关于Elasticsearch的调优,但是每次都是一个个点的单独讲,很多时候都是case by case的解答,本文简单梳理下日常的Elasticsearch使用调优,以下仅为自己日常经验之谈,如有疏漏,还请大家帮忙指正.

详解SQL盲注测试高级技巧

- - FreeBuf.COM
这篇文章主要写了一些加快盲注速度的技巧和盲注中比较精巧的语句,虽然注入并不是什么新技术了. 但是数据库注入漏洞依然困扰着每一个安全厂商,也鞭策着每一个安全从业者不断前进. 首先来简单介绍一下盲注,盲注是不能通过直接显示的途径来获取数据库数据的方法. 在盲注中,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同,也可以是响应时间不同).

ORACLE SQL TUNING各种技巧及复杂实例

- - 数据库 - ITeye博客
ORACLE的优化器共有3种:. CHOOSE (选择性). 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须定期更新统计信息,以保证数据库中的对象统计信息(object statistics)的准确性. 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关.

5个让DBA爱上你的SQL技巧

- - 极客521 | 极客521
码农网原创翻译,转载请看清文末的转载要求,谢谢合作. 我的一个同事Martin Masarik,SQLde的CEO,跟我谈起了他的一个DBA朋友,他管理着一个国际银行的Oracle数据库,数据规模约2TB. Martin Masarik曾问他:“什么样的SQL问题能让你气愤到竖起头发. ”,他总结了以下几点,都是经验之谈:.

优化 SQL SELECT 语句性能的 6 个简单技巧

- - 外刊IT评论
SELECT语句的性能调优有时是一个非常耗时的任务,在我看来它遵循 帕累托原则. 20%的努力很可能会给你带来80%的性能提升,而为了获得另外20%的性能提升你可能需要花费80%的时间. 除非你在 金星工作,那里的每一天都等于地球上的243天,否则交付期限很有可能使你没有足够的时间来调优SQL查询.

HBase性能调优

- - 学着站在巨人的肩膀上
我们经常看到一些文章吹嘘某产品如何如何快,如何如何强,而自己测试时却不如描述的一些数据. 其实原因可能在于你还不是真正理解其内部结构,对于其性能调优方法不够了解. 本文转自TaoBao的Ken Wu同学的博客,是目前看到比较完整的HBase调优文章. 原文链接:HBase性能调优. 因官方Book Performance Tuning部分章节没有按配置项进行索引,不能达到快速查阅的效果.

hbase性能调优

- - 数据库 - ITeye博客
   1)、hbase.regionserver.handler.count:该设置决定了处理RPC的线程数量,默认值是10,通常可以调大,比如:150,当请求内容很大(上MB,比如大的put、使用缓存的scans)的时候,如果该值设置过大则会占用过多的内存,导致频繁的GC,或者出现OutOfMemory,因此该值不是越大越好.