亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

Oracle 語句優化分析說明第1/2頁

2024-08-29 13:56:18
字體:
來源:轉載
供稿:網友
1. ORACLE 的解析器按照從右到左的順序處理 FROM 子句中的表名,因此 FROM 子句中寫在最后的表(基礎表 driving table)將被最先處理。在 FROM 子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表。
例如:
表 TAB1 16,384 條記錄
表 TAB2 1 條記錄
選擇 TAB2作為基礎表 (最好的方法)
select count(*) from tab1,tab2 執行時間 0.96秒
選擇 TAB2作為基礎表 (不佳的方法)
select count(*) from tab2,tab1 執行時間 26.09秒
2. ORACLE 采用自下而上的順序解析 WHERE 子句,根據這個原理,表之間的連接必須寫在其他 WHERE 條件之前, 那些可以過濾掉最大數量記錄的條件必須寫在 WHERE 子句的末尾。
例如:
(低效,執行時間 156.3秒)
SELECT …
FROM EMP E
WHERE SAL > 50000
AND JOB = ‘MANAGER'
AND 25 < (SELECT COUNT(*) FROM EMP
WHERE MGR=E.EMPNO);
(高效,執行時間 10.6秒)
SELECT …
FROM EMP E
WHERE 25 < (SELECT COUNT(*) FROM EMP
WHERE MGR=E.EMPNO)
AND SAL > 50000
AND JOB = ‘MANAGER';
3. SELECT子句中避免使用'*'
當你想在 SELECT子句中列出所有的 COLUMN時,使用動態 SQL列引用 ‘*' 是一個方便的方法。不幸的是,這是一個非常低效的方法。 實際上,ORACLE 在解析的過程中,會將‘*' 依次轉換成所有的列名, 這個工作是通過查詢數據字典完成的, 這意味著將耗費更多的時間。
4. 使用DECODE 函數來減少處理時間, 使用 DECODE 函數可以避免重復掃描相同記錄或重復連接相同的表。
5. 刪除重復記錄
最高效的刪除重復記錄方法 ( 因為使用了 ROWID)
DELETE FROM EMP E
WHERE E.ROWID > (SELECT MIN(X.ROWID)
FROM EMP X
WHERE X.EMP_NO = E.EMP_NO);
6. 計算記錄條數
和一般的觀點相反,count(*) 比 count(1)稍快,當然如果可以通過索引檢索,對索
引列的計數仍舊是最快的。 例如 COUNT(EMPNO)
7. 用WHERE子句替換HAVING子句
避免使用 HAVING子句,HAVING 只會在檢索出所有記錄之后才對結果集進行過濾。
這個處理需要排序,總計等操作。 如果能通過 WHERE 子句限制記錄的數目,那就能減少這方面的開銷。
例如:
低效
SELECT REGION,AVG(LOG_SIZE)
FROM LOCATION
GROUP BY REGION
HAVING REGION REGION != ‘SYDNEY'
AND REGION != ‘PERTH'
高效
SELECT REGION,AVG(LOG_SIZE)
FROM LOCATION
WHERE REGION REGION != ‘SYDNEY'
AND REGION != ‘PERTH'
GROUP BY REGION
HAVING 中的條件一般用于對一些集合函數的比較,如 COUNT() 等等。除此而外,一般的條件應該寫在 WHERE 子句中。
8. 減少對表的查詢
在含有子查詢的 SQL語句中,要特別注意減少對表的查詢。
例如:
低效
SELECT TAB_NAME
FROM TABLES
WHERE TAB_NAME = ( SELECT TAB_NAME
FROM TAB_COLUMNS
WHERE VERSION = 604)
AND DB_VER= ( SELECT DB_VER
FROM TAB_COLUMNS
WHERE VERSION = 604)
高效
SELECT TAB_NAME
FROM TABLES
WHERE (TAB_NAME,DB_VER)
= ( SELECT TAB_NAME,DB_VER)
FROM TAB_COLUMNS
WHERE VERSION = 604)
9. 使用表的別名ALIAS
當在 SQL語句中連接多個表時, 請使用表的別名并把別名前綴于每個 Column上。這
樣一來,就可以減少解析的時間并減少那些由 Column歧義引起的語法錯誤。
(Column歧義指的是由于 SQL中不同的表具有相同的 Column名,當 SQL語句中出現這個 Column時,SQL解析器無法判斷這個 Column的歸屬)
10. 用EXISTS替代IN
在許多基于基礎表的查詢中,為了滿足一個條件,往往需要對另一個表進行聯接。在這
種情況下, 使用 EXISTS(或 NOT EXISTS)通常將提高查詢的效率。
低效:
SELECT *
FROM EMP (基礎表)
WHERE EMPNO > 0
AND DEPTNO IN (SELECT DEPTNO
FROM DEPT
WHERE LOC = ‘MELB')
高效:
SELECT *
FROM EMP (基礎表)
WHERE EMPNO > 0
AND EXISTS (SELECT ‘X'
FROM DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO
AND LOC = ‘MELB')
11. 用NOT EXISTS替代 NOT IN
在子查詢中, NOT IN子句將執行一個內部的排序和合并。 無論在哪種情況下, NOT IN都是最低效的 (因為它對子查詢中的表執行了一個全表遍歷)。 為了避免使用 NOT IN ,我們可以把它改寫成外連接(Outer Joins)或 NOT EXISTS.
例如:
SELECT …
FROM EMP
WHERE DEPT_NO NOT IN (SELECT DEPT_NO
FROM DEPT
WHERE DEPT_CAT='A');
為了提高效率。改寫為:
(方法一: 高效)
SELECT ….
FROM EMP A,DEPT B
WHERE A.DEPT_NO = B.DEPT(+)
AND B.DEPT_NO IS NULL
AND B.DEPT_CAT(+) = ‘A'
(方法二: 最高效)
SELECT ….
FROM EMP E
WHERE NOT EXISTS (SELECT ‘X'
FROM DEPT D
WHERE D.DEPT_NO = E.DEPT_NO
AND DEPT_CAT = ‘A');
12. 用表連接替換EXISTS
通常來說 ,采用表連接的方式比 EXISTS 更有效率
SELECT ENAME
FROM EMP E
WHERE EXISTS (SELECT ‘X'
FROM DEPT
WHERE DEPT_NO = E.DEPT_NO
AND DEPT_CAT = ‘A');
(更高效)
SELECT ENAME
FROM DEPT D,EMP E
WHERE E.DEPT_NO = D.DEPT_NO
AND DEPT_CAT = ‘A' ;
13. 用EXISTS替換DISTINCT
當提交一個包含一對多表信息(比如部門表和雇員表)的查詢時,避免在 SELECT 子句
中使用 DISTINCT. 一般可以考慮用 EXIST 替換
例如:
低效:
SELECT DISTINCT DEPT_NO,DEPT_N
FROM DEPT D,EMP E
WHERE D.DEPT_NO = E.DEPT_NO
高效:
SELECT DEPT_NO,DEPT_NAME
FROM DEPT D
WHERE EXISTS ( SELECT ‘X'
FROM EMP E
WHERE E.DEPT_NO = D.DEPT_NO);
14. 避免在索引列上使用計算
WHERE 子句中,如果索引列是函數的一部分。優化器將不使用索引而使用全表掃描。
舉例:
低效:
SELECT …
FROM DEPT
WHERE SAL * 12 > 25000;
高效:
SELECT …
FROM DEPT
WHERE SAL > 25000/12;
:這是一個非常實用的規則,請務必牢記
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
26uuu另类亚洲欧美日本一| 亚洲国产又黄又爽女人高潮的| 伦伦影院午夜日韩欧美限制| 亚洲精品国产福利| 日韩中文字幕网址| 日韩美女福利视频| 国产精品视频永久免费播放| 中文字幕欧美日韩精品| 69**夜色精品国产69乱| 在线日韩av观看| 欧美成人午夜激情| 亚洲成人黄色网址| 亚洲女人天堂色在线7777| 亚洲美女又黄又爽在线观看| 欧美激情xxxx| 亚洲精品国产品国语在线| 午夜精品福利电影| 亚洲性视频网址| 国产精品一区二区av影院萌芽| 美女视频黄免费的亚洲男人天堂| 久久久精品国产一区二区| 青青久久av北条麻妃海外网| 久久久久久久久久久网站| 久久久女人电视剧免费播放下载| 久久最新资源网| 久久精品成人动漫| 91欧美日韩一区| 国产91精品久久久久久| 欧美一区在线直播| 福利精品视频在线| 91免费看片网站| 国产精品第一区| 欧美成人午夜视频| 欧美成人久久久| 亚洲视频网站在线观看| 91精品久久久久久久久| 亚洲国产小视频在线观看| 欧美激情影音先锋| 成人激情视频免费在线| 国产精品一区二区av影院萌芽| 日韩av大片在线| 在线观看视频99| 国产精品欧美日韩久久| 国产精品69精品一区二区三区| 欧美激情18p| 欧美激情视频一区| 亚洲bt天天射| 国产精品欧美风情| 7777精品久久久久久| 久久视频国产精品免费视频在线| 国产一区深夜福利| 欧美午夜精品久久久久久浪潮| 欧美丝袜美女中出在线| 91精品国产高清久久久久久| 欧美裸体男粗大视频在线观看| 久久综合免费视频| 日韩亚洲欧美中文高清在线| 久久久久久免费精品| 欧美成人精品h版在线观看| 亚洲精品动漫久久久久| 国产日产欧美精品| 亚洲视频一区二区| 精品亚洲精品福利线在观看| 韩国美女主播一区| 精品日本美女福利在线观看| 亚洲成在人线av| 久久伊人色综合| 国产亚洲欧洲高清| 亚洲精品720p| 欧美极品第一页| 在线观看日韩欧美| 国产精品亚洲片夜色在线| 久久国产精品偷| 色噜噜狠狠色综合网图区| 久久久精品国产亚洲| 国产欧美日韩精品专区| 日韩高清不卡av| 国产精品久久久久久亚洲调教| 中文字幕成人在线| 亚洲人成绝费网站色www| 欧美在线影院在线视频| 欧美一区二区色| 日韩视频免费观看| 日韩少妇与小伙激情| 黑人与娇小精品av专区| 成人xxxxx| 国产成人精品一区二区在线| 中文字幕在线看视频国产欧美| 国产精品亚洲综合天堂夜夜| 国产精品视频yy9099| 亚洲大尺度美女在线| 国产美女搞久久| 亚洲天天在线日亚洲洲精| 91亚洲国产成人精品性色| 亚洲最大的网站| 欧美日韩成人网| 高跟丝袜欧美一区| 成人h视频在线观看播放| 一区二区日韩精品| 精品一区精品二区| 精品久久久久久亚洲国产300| 久久久久久av| 亚洲毛茸茸少妇高潮呻吟| 91在线免费看网站| 亚洲精品视频免费在线观看| 5252色成人免费视频| 国产97在线视频| 欧美日韩成人在线视频| 国产精品久久久久高潮| 亚洲18私人小影院| 国产99视频在线观看| 亚洲成人在线网| 黑人巨大精品欧美一区二区| 亚洲国产91色在线| 国产日韩在线观看av| 国产成人精品999| 欧美激情一区二区三区高清视频| 亚洲永久免费观看| 久操成人在线视频| 欧美激情区在线播放| 亚洲性av网站| 国产精品96久久久久久又黄又硬| 国产成人欧美在线观看| 亚洲自拍另类欧美丝袜| 国产精品久久久久久久久久新婚| 国产精品美女免费| 欧美情侣性视频| 国产精品久久久久9999| 中文字幕无线精品亚洲乱码一区| 精品国产区一区二区三区在线观看| 美女少妇精品视频| 68精品国产免费久久久久久婷婷| 久久精品一本久久99精品| 中文字幕欧美日韩精品| 一本一本久久a久久精品综合小说| 92版电视剧仙鹤神针在线观看| 色偷偷噜噜噜亚洲男人的天堂| 国产成人综合久久| 国产精品情侣自拍| 亚洲视频视频在线| 欧美三级欧美成人高清www| 91精品久久久久久久久久久| 欧美中文字幕视频| 成人美女免费网站视频| 色婷婷av一区二区三区在线观看| 97超级碰碰碰久久久| 视频一区视频二区国产精品| 亚洲欧洲免费视频| 精品一区二区三区电影| 日本在线精品视频| 精品久久久久久久久久久久| 日韩精品在线观看一区| 欧美插天视频在线播放| 亚洲xxxxx电影| 伊人久久久久久久久久久| 亚洲综合成人婷婷小说| 欧美激情xxxx性bbbb| 亚洲精品天天看| 日韩av日韩在线观看| 国产精品一区=区| 亚洲大胆人体视频| 中文字幕亚洲欧美日韩在线不卡| 青青久久av北条麻妃黑人| 亚洲国产精品免费|