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.若一个小表必须关联另外的大表才能查出相应的结果,可以将大表先子查询再来进行关联,不要一下子全部关联在一起。
SELECT 1
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语句编写的事
最新推荐文章于 2024-09-24 11:36:02 发布