熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle數據庫查詢十個小技巧(三)

2013-11-13 15:28:01  來源: Oracle 

  第八個技巧慎用Like等通配符

  Like關鍵字從技術上來說是一個非常友善的通配符利用這個通配符我們可以實現很多模糊查詢如現在在一個人事檔案系統中用戶想知道身份證號碼以開頭的人事信息此時就可以利用Like語句實現我們可以利用下面的條件語句實現我們的需求where 身份證號碼 like %通過這個條件語句可以查到所有身份證以開頭的號碼

  但是當用戶在一張大表中采用這個LIKE語句的話就會發現這個查詢語句的運行效率非常的慢這是什麼原因造成的呢?其實不管是Like 關鍵字若采用MATCHES關鍵字的話若在大量數據中查找符合條件的記錄則其運行效率也比較低這主要是其技術特性所造成的

  Like與Matches兩個關鍵字其支持通配符匹配在有些專業書籍上把這個叫做正規表達式不過由於在利用這些關鍵字查詢的時候 數據庫系統不是通過索引來查詢而是采用順序掃描的方式來查詢顯然真是這種技術特性造成了Like與Mateches兩個關鍵字查詢效率的低下特別是在復雜查詢或者大表查詢中用戶可以明顯感覺到速度比較慢

  索引是數據庫中的一個重要的數據結構索引如果利用的合理的話可以大幅度的提升數據庫的查詢性能一般情況下我們在數據庫設計的時候要充分的利用索引來提高數據庫的運行效率如對於一些經常需要用到的查詢功能我們需要為沒有指定外鍵的列建立索引;如有查詢大表數據而且又需根據好幾個字段的值對其進行排序也需要在這些列上建立復合索引特別是在一些應用系統上往往可以按以下字段的名稱就會對這個字段進行排序遇到這種情況的話更加需要在這些頻繁進行排序的列上建立索引以提高重新排序的效率可見若在查詢的時候若不能利用索引提高查詢效率的話則就好像跑車失去四輪驅動速度會大受影響

  所以在數據庫系統設計中要盡量避免采用Like或者Matche關鍵字有時候我們可以利用其他運算符號來代替如我們可以利用〉(大於)或者<(小於)符號來達到類似的需求若真的要采用這兩個關鍵字的話則就需要做好查詢優化方面的工作如不要在基礎表中直接利用這個兩個關鍵字而是通過報表視圖或者臨時表等來查詢以減少其不良影響

  第九個技巧利用注釋提高查詢語句的可讀性

  在數據庫設計中有一個非常奇怪的現象一些專家級的數據庫設計人員在寫查詢語句的時候非對語句進行詳細的注釋有時會注釋的內容大大超過了查詢代碼本身的篇幅可是往往一些入門不久的數據庫設計人員不喜歡寫注釋語句這是一個很反常的現象

  筆者剛開始接觸數據庫的時候也不喜歡寫注釋語句覺得寫注釋語句太浪費時間但是一個偶然的事件讓筆者改掉了這個壞習慣那時筆者在觀摩一個專家設計數據庫的時候被其密密麻麻的注釋驚呆了看了其代碼之後筆者可以非常輕松的閱讀完其所有的代碼不愧為是專家級的人物看了他的注釋之後在看看自己編寫的代碼注視那真是大巫見小巫了從此之後筆者也在慢慢培養自己編寫代碼的習慣現在筆者在數據庫設計的時候注釋已經寫的很詳細了至少筆者的同事在看到我的注釋之後不用看源代碼就知道筆者要實現的目的了

  在編寫注釋的時候要注意幾個問題

  一是注釋越詳細越好其實注釋最多犧牲一點磁盤空間而不會對數據庫的性能產生任何不良的影響相反注釋詳細的話對於後續數據庫維護與管理系統二次開發的等等都會提供很大的幫助

  二是最好采用英文注釋若采用中文注釋的話有時候數據庫語言設置不當在數據庫實例安裝的時候不會把中文的注釋帶過去所以作為數據庫管理員要有一定的英語基礎學會利用英語寫注釋其實這也不是很難只要多看看別人設計的數據庫注釋把他們常用的注釋復制下來通過選擇合適的進行復制粘貼就可以完成任務

  三是不僅在寫查詢語句的時候要做好代碼的注釋工作在編寫其他代碼的時候如過程函數等等也要添加詳細的代碼以增加這些復雜功能的可讀性

  四是注釋的內容一般注釋應該包含如下幾方面的內容一是這段代碼要實現的功能;二是這段代碼需要調用的參數;三是這段代碼輸出的結果若是多表關聯查詢的話最好能夠說明表之間的對應關系若在查詢語句中直接調用了函數的話則最好能夠注明這個函數的功能;等等終止一個原則就是讓其他人看到這個注釋不再需要去查詢其他的資料就可以明白這段代碼的含義

  詳細的注釋內容不僅不會降低數據庫的運行性能而且還可以提高數據庫的管理與維護的效率;同時也可以加快前台應用程序開發設計的速度又因為查詢語句是系統中利用的最多的語句也是引用的最頻繁的語句故在查詢語句中更加需要做好相關的注釋

  第十個技巧必要的時候限制用戶所使用的行

  在使用一些大型管理系統的時候如ERP系統我們若查詢產品信息默認的情況下若記錄比較多的時候其不會把所有的記錄都查詢出來如在ERP系統的數據庫中其有個產品信息而端子類的產品信息就占據到此時我們在查詢條件中若產品類別限制為端子的話則其查詢出來的結果也可能不是所有的端子默認顯示的話可能只有前面的個端子類產品若用戶需要看到全部的產品信息就需要點擊顯示全部按鈕才可以顯示出全部的信息

  其實不管是一些應用程序如此設計在Oracle數據庫中本身也有這方面的限制如直接在PL/SQL客戶端中查詢數據的話其顯示的記錄默認情況下也是有限制的而不會把所有符合條件的語句查詢出來若用戶需要查詢所有符合條件的記錄則需要點擊繼續按鈕以讓數據庫顯示所有的記錄

  為什麼要做類似的限制呢?這主要就是為了提高數據庫查詢的性能我們直接在數據庫服務器上在幾百萬條記錄中查詢的話顯示幾百條記錄跟現實幾千條記錄所花費的時間明顯不同前者可能只需要秒即可而後者可能需要分鐘所以為了減少用戶等待的時間我們往往需要限制首次查詢默認顯示的記錄數字

  如我們往往在查詢語句中利用top 來讓數據庫只顯示前條記錄如此的話可以明顯的縮短用戶的等待時間默認情況下是根據記錄創建的時間順序來顯示記錄的最遲創建的記錄其顯示在最前以此類推

  當用戶需要的數據在前面條之內則就不需要再查看其他記錄了相反若不在的話則就需要查詢全部記錄信息了


From:http://tw.wingwit.com/Article/program/Oracle/201311/16756.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.