那些高性能的SQL语句编写的事
来源:互联网 发布:python 推荐系统库 编辑:程序博客网 时间:2024/06/15 09:15
1.ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。
见2的例子
2.多表关联查询时,主表放在最后。
--------------------------------- 修改前 ----------------------------------------
select /*+rule*/
b.bill_pract_num,
t.insert_by,
t.login_id,
b.bp_header_id
from zte_sie_image_uploads t, zte_sie_bp_headers b
where t.enabled_flag = 'Y'
and t.job_status IN ('-2', 'BUILDED', '-1')
and t.insert_date > sysdate - 30
and t.job_number = b.bill_pract_num -- 实物票据号(影像分组号)
and b.enabled_flag = 'Y'
and b.bill_status = '205_HQ_INCEPT'
--------------------------------- 修改后 ----------------------------------------
select /*+rule*/
b.bill_pract_num,
t.insert_by,
t.login_id,
b.bp_header_id
from zte_sie_bp_headers b, zte_sie_image_uploads t
where 1=1
and b.enabled_flag = 'Y'
and b.bill_status || '' = '205_HQ_INCEPT'
and b.bill_pract_num = t.job_number
AND t.enabled_flag = 'Y'
and t.job_status IN ('-2', 'BUILDED', '-1')
and t.insert_date > sysdate -30
3.一般情况下 [not ]exists比[not ]in效率会高,因为exists是通过比较,相同即返回结果,而in会先返回子查询结果,然后再进行对比。
4.>=、<=比>、<效率高,如下示例:查询时,a会首先定位到3的记录,然后向前移去扫描对应的记录,而b则直接跳到4的记录,然后扫描对应的记录。
a.SELECT * FROM EMP WHERE DEPTNO >3
b.SELECT * FROM EMP WHERE DEPTNO >=4
5.多表关联时使用别名,这样做能提高sql解释的效率,同时可以规避掉列名重名的问题。
6.查询时尽量不用*,最好具体到需要查询的字段。INSERT时,把字段列出来,避免改表结构后发生错误。
7.若一个小表必须关联另外的大表才能查出相应的结果,可以将大表先子查询再来进行关联,不要一下子全部关联在一起。
SELECT1
FROM zte_fbp_bank_accounts bb,
(SELECT bau.bank_account_id
FROM zte_fbp_bank_account_uses bau
WHERE bau.enabled_flag = 'Y'
AND bau.use_id = 1
AND bau.use_type = 'ORG') a
WHERE bb.enabled_flag = 'Y'
AND TRIM(bb.bank_name) = TRIM('招商银行')
AND bb.bank_account_id = a.bank_account_id
8.某些表查询小量数据,但必须和别的表关联才能出数据。
--------------------------------- 反例 ----------------------------------------
SELECT DISTINCT d.dept_id,d.dept_name
FROM dept d,emp e
WHERE d.dept_id = e.dept_id;
--------------------------------- 正例 ----------------------------------------
SELECT dept_id,dept_name
FROM dept d
WHERE EXISTS (SELECT 1
FROM emp e
WHERE e.dept_id = d.dept_id);
9.递归时,使用start with xx connect by xxx语句。
10. order by不是特殊需要时、尽可能扔掉。
- 那些高性能的SQL语句编写的事
- 如何编写高性能的 MySQL 语句
- 如何编写高性能的 MySQL 语句
- 如何编写效率高的SQL语句
- SQL编写高性能的文章
- 写出高性能SQL语句的法则
- 什么才是高性能的SQL语句
- 如何写出高性能的SQL语句
- 如何写出高性能的SQL语句
- db2_高性能的sql语句
- 优化SQL查询:如何写出高性能的SQL语句
- 教你编写高性能的 sql 语法
- 编写高性能SQL
- 写出高性能SQL语句的35条方法
- 写出高性能SQL语句的35条方法
- 写出高性能SQL语句的35条方法分析
- 写出高性能SQL语句的35条方法
- 高性能SQL语句的35条方法
- 敌兵布阵(树状数组)
- Linux中块设备和字符设备的区别
- 消息队列MQ技术的介绍和原理
- django构建带时区时间对象
- maven编译的报错:编码GBK的不可映射字符
- 那些高性能的SQL语句编写的事
- HTML5实现的矢量卡片式组织结构图
- Leetcode Linked List Cycle II 循环链表入口
- java_web初学笔记之<ServletConfig和ServletContext详解>
- static变量
- 光线传感器 + 传感器指南针
- Android学习(6)音频管理AudioManager-3
- 【代码片段】javascript多个多选框全选或全不选
- java电子书chm全套下载