• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    ORACLE SQL性能優化系列 (七)

    發布: 2008-10-27 13:17 | 作者: black_snail  | 來源: net130 | 查看: 68次 | 進入軟件測試論壇討論

    領測軟件測試網 43. 用WHERE替代ORDER BY

      ORDER BY 子句只在兩種嚴格的條件下使用索引.

      ORDER BY中所有的列必須包含在相同的索引中并保持在索引中的排列順序.

      ORDER BY中所有的列必須定義為非空.

      WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列.

      例如:

      表DEPT包含以下列:

    DEPT_CODE PK NOT NULL

    DEPT_DESC NOT NULL

    DEPT_TYPE NULL

      非唯一性的索引(DEPT_TYPE)

      低效: (索引不被使用)

    SELECT DEPT_CODE

    FROM DEPT

    ORDER BY DEPT_TYPE

    EXPLAIN PLAN:

    SORT ORDER BY

    TABLE ACCESS FULL

      高效: (使用索引)

    SELECT DEPT_CODE

    FROM DEPT

    WHERE DEPT_TYPE > 0

    EXPLAIN PLAN:

    TABLE ACCESS BY ROWID ON EMP

    INDEX RANGE SCAN ON DEPT_IDX

      譯者按:ORDER BY 也能使用索引! 這的確是個容易被忽視的知識點. 我們來驗證一下:

    SQL> select * from emp order by empno;

    Execution Plan

    ----------------------------------------------------------

    0 SELECT STATEMENT Optimizer=CHOOSE

    1 0 TABLE ACCESS (BY INDEX ROWID) OF 'EMP'

    2 1 INDEX (FULL SCAN) OF 'EMPNO' (UNIQUE)

      44. 避免改變索引列的類型

      當比較不同數據類型的數據時, ORACLE自動對列進行簡單的類型轉換.假設 EMPNO是一個數值類型的索引列.

    SELECT …

    FROM EMP

    WHERE EMPNO = ‘123’

      實際上,經過ORACLE類型轉換, 語句轉化為:

    SELECT …

    FROM EMP

    WHERE EMPNO = TO_NUMBER(‘123’)

      幸運的是,類型轉換沒有發生在索引列上,索引的用途沒有被改變.

      現在,假設EMP_TYPE是一個字符類型的索引列.

    SELECT …

    FROM EMP

    WHERE EMP_TYPE = 123

      這個語句被ORACLE轉換為:

    SELECT …

    FROM EMP

    WHERE TO_NUMBER(EMP_TYPE)=123

      因為內部發生的類型轉換, 這個索引將不會被用到!

      譯者按:為了避免ORACLE對你的SQL進行隱式的類型轉換, 最好把類型轉換用顯式表現出來. 注意當字符和數值比較時, ORACLE會優先轉換數值類型到字符類型.

      

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: oracle ORACLE Oracle sql SQL Sql 性能

    31/3123>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>