国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle查!詢技巧

2019-11-02 14:25:22
字體:
來源:轉載
供稿:網友

   1.WHERE子句中的連接順序:ORACLE采用自下而上的順序解析WHERE子句,根據這個原理,表之間的連接必須寫在其他WHERE條件之前, 那些可以過濾掉最大數量記錄的條件必須寫在WHERE子句的末尾. 2.SELECT子句中避免使用 ‘ *’:ORACLE在解析的過程中, 會將'*' 依次轉

  1. WHERE子句中的連接

天龍影院[www.aikan.tv/special/tianlongyingyuan/]
順序:ORACLE采用自下而上的順序解析WHERE子句,根據這個原理,表之間的連接必須寫在其他WHERE條件之前, 那些可以過濾掉最大數量記錄的條件必須寫在WHERE子句的末尾.

  2. SELECT子句中避免使用 ‘ *’:ORACLE在解析的過程中, 會將'*' 依次轉換成所有的列名, 這個工作是通過查詢數據字典完成的, 這意味著將耗費更多的時間

  3. 使用DECODE函數來減少處理時間:使用DECODE函數可以避免重復掃描相同記錄或重復連接相同的表.

  4. 用TRUNCATE替代DELETE:當刪除表中的記錄時,在通常情況下, 回滾段(ROLLBACK SEGMENTS ) 用來存放可以被恢復的信息. 如果你沒有COMMIT事務,ORACLE會將數據恢復到刪除之前的狀態(準確地說是恢復到執行刪除命令之前的狀況) 而當運用TRUNCATE時, 回滾段不再存放任何可被恢復的信息.當命令運行后,數據不能被恢復.因此很少的資源被調用,執行時間也會很短. (譯者按: TRUNCATE只在刪除全表適用,TRUNCATE是DDL不是DML)

  5. 盡量多使用COMMIT:只要有可能,在程序中盡量多使用COMMIT, 這樣程序的性能得到提高,需求也會因為COMMIT所釋放的資源而減少:

  COMMIT所釋放的資源:

   回滾段上用于恢復數據的信息.

   被程序語句獲得的鎖

   REDO LOG BUFFER 中的空間

   ORACLE為管理上述3種資源中的內部花費

  6. 使用表的別名(ALIAS):當在SQL語句中連接多個表時, 請使用表的別名并把別名前綴于每個COLUMN上.這樣一來,就可以減少解析的時間并減少那些由COLUMN歧義引起的語法錯誤.

  7. 用EXISTS替代IN、用NOT EXISTS替代NOT IN:在許多基于基礎表的查詢中,為了滿足一個條件,往往需要對另一個表進行聯接.在這種情況下, 使用EXISTS(或NOT EXISTS)通常將提高查詢的效率. 在子查詢中,NOT IN子句將執行一個內部的排序和合并. 無論在哪種情況下,NOT IN都是最低效的 (因為它對子查詢中的表執行了一個全表遍歷). 為了避免使用NOT IN ,我們可以把它改寫成外連接(OUTER JOINS)或NOT EXISTS.

  例子:

  高效:

  SELECT * FROM EMP (基礎表) WHERE EMPNO > 0 AND EXISTS (SELECT ‘X' FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = ‘MELB')

  低效:

  SELECT * FROM EMP (基礎表) WHERE EMPNO > 0 AND DEPTNO IN(SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB')

  8. 用EXISTS替換DISTINCT:當提交一個包含一對多表信息(比如部門表和雇員表)的查詢時,避免在SELECT子句中使用DISTINCT. 一般可以考慮用EXIST替換, EXISTS 使查詢更為迅速,因為RDBMS核心模塊將在子查詢的條件一旦滿足后,立刻返回結果。

  例子:

  低效:

  SELECT DISTINCT DEPT_NO,DEPT_NAME 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);

  9. SQL語句用大寫的;因為ORACLE總是先解析SQL語句,把小寫的字母轉換成大寫的再執行;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大邑县| 阜南县| 伊川县| 汾西县| 阿勒泰市| 夏河县| 囊谦县| 濉溪县| 奎屯市| 巧家县| 迭部县| 青龙| 鸡泽县| 泰安市| 内乡县| 河源市| 宜昌市| 遂溪县| 耒阳市| 进贤县| 永吉县| 杂多县| 盐亭县| 浏阳市| 依安县| 普兰店市| 措美县| 滦南县| 胶州市| 左云县| 襄城县| 刚察县| 格尔木市| 盐池县| 芒康县| 双流县| 屏东市| 蒙城县| 商城县| 盈江县| 兴化市|