加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle 性能调优

发布时间:2020-12-12 13:19:33 所属栏目:百科 来源:网络整理
导读:?在 oracle 中效率排行, ? 表连接existnot existinno in 并且使用in 查询 会有查询条件数量不能超过1000 的限制; ? 简单提高效率可以使用 exist 代替in? ? ?换成表连接可以更大的提高效率; ? 用left join (左连接) 代替 not in 和 not exist 用 inner joi

?在 oracle 中效率排行,

? 表连接>exist>not exist>in>no in

并且使用in 查询 会有查询条件数量不能超过1000 的限制;

?

简单提高效率可以使用 exist 代替in?

? ?换成表连接可以更大的提高效率;

?

用left join (左连接) 代替 not in 和 not exist

用 inner join(内连接) 代替 in 和 exist

这样可以大大提高效率;

(1)
SELECT?PUB_NAME?

FROM?PUBLISHERS?

WHERE?PUB_ID?NOT?IN?(SELECT?PUB_ID?FROM?TITLES?WHERE?TYPE?=?‘BUSINESS‘)

可以改写成:?

SELECT?A.PUB_NAME?

FROM?PUBLISHERS?A?LEFT?JOIN?TITLES?B?ON?B.TYPE?=?‘BUSINESS‘?AND?A.PUB_ID=B.?PUB_ID
WHERE?B.PUB_ID?IS?NULL

?

(2)
SELECT?TITLE?

FROM?TITLES?

WHERE?NOT?EXISTS?(SELECT?TITLE_ID?FROM?SALES?WHERE?TITLE_ID?=?TITLES.TITLE_ID)

可以改写成:
SELECT?TITLE?

FROM?TITLES?LEFT?JOIN?SALES?ON?SALES.TITLE_ID?=?TITLES.TITLE_ID

WHERE?SALES.TITLE_ID?IS?NULL?

?

如果保证子查询没有重复?,IN、EXISTS的相关子查询可以用INNER?JOIN?代替。

比如:
SELECT?PUB_NAME?

FROM?PUBLISHERS?

WHERE?PUB_ID?IN?(SELECT?PUB_ID?FROM?TITLES?

WHERE?TYPE?=?‘BUSINESS‘)?

可以改写成:
SELECT?DISTINCT?A.PUB_NAME?

FROM?PUBLISHERS?A?INNER?JOIN?TITLES?B?ON?B.TYPE?=?‘BUSINESS‘?AND?A.PUB_ID=B.?PUB_ID

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读