細數提高SQL查詢效能的十條戒律

2021-05-23 00:33:48 字數 1661 閱讀 4623

引自:http://www.54master.com/html/yingjianshebei/shujuku/2010/0701/3582.html

記錄詳細的需求文件

在寫sql之前必須弄清楚需求, 具體要取什麼資料, 有些什麼具體的約束條件, 在資料倉儲環境中還可以考慮補上這個需求具體對應哪些報表, 對應的基礎表如何. 到開發環境的話, 可以考慮加上這條sql服務於哪些業務(頁面),呼叫頻率如何.

不要重新製造輪子

對於一些已經比較成熟的解決方案,有比較現成的例子的sql,要善於利用已有sql,已有模板.

降低語句的複雜度

有些同學可能比較喜歡使用比較炫的技術,比較炫的sql來解決問題. 但是要切記一點, 使用過於複雜過於新的技術, 如果不能在效能(以及其他方面)帶來好處的話, 只會使得這條sql難於維護, 使得其他相關人員難於理解.

小心處理null

null在oracle資料庫中是乙個非常特別的值, 它不等於任何值, 所以如果你的sql返回的值數量偏少,或者根本不對很可能就是使用null出現了問題..常見的情況是:

1. 查詢的時候直接使用條件 colx = ***,而這個colx裡面是有null值的, 這種情況下查詢的返回結果是不會包含null值對應的記錄的, 如果要查詢出null對應的記錄, 需要使用 colx is null (is not null).

2. var 為null的時候, 在plsql中給var賦值, var := var + ***;這種情況下var的值會一直是null的, 這一點需要特別注意, 我自己也犯過好幾次這個錯誤.

自己核對資料型別

在where條件裡面要仔細地核對資料型別, 由於**轉換的問題, 在資料型別錯誤的時候, oracle無法正確使用索引, 可能會導致sql執行非常慢.

小心處理重複資料

在需求明確的情況下, 如果你不在乎是否出現重覆記錄, 或者明確知道不會出現重複資料的情況下, 盡量使用union all而不是union進行查詢, union會涉及到昂貴的排序操作.

避免不必要的優化操作

sql的效能調優可能非常有趣非常帶勁, 但是很多時候調優可能意義不大, 比如對於只會使用一次的查詢, 你可能很少在乎是1秒鐘結束還是2秒鐘結束..

不過一些基本的優化規則還是要用的:

只查詢你需要的字段, 而不要所有的查詢都是用select *來進行.

在通過索引來查詢更合適的時候, 盡量在查詢條件中指定有索引的字段來查詢. (在返回的記錄條數很少的時候, 使用索引一般都能更加快速的得到查詢結果.不要可以避免使用表連線. 關聯式資料庫就是為了表連線而設計的.

盡可能使用繫結變數

在開發環境使用的sql語句盡量使用繫結變數, 這樣可以大大緩解oracle資料庫解析sql的消耗, 也可以大大提高資料庫的可擴充套件性.

使用原始碼控制工具

最好使用cvs/svn一類的原始碼控制工具來管理你的sql/plsql**, 這對於後期的維護有非常大的幫助, 也有助於其他人更好的理解你最初寫這條sql的意圖.

測試,測試,測試.

在sql寫好之後, 要深入的進行測試, 以確保其正常執行

分組查詢各省份的前十條記錄

select from select mu.row number over partition by mu.prov code order by mu.prov code rn from mvno user mu where rn 2 在使用 row number over 函式時候,over 裡頭...

提高SQL查詢效能的7個法寶

每個資料庫平台上的sql開發人員都是在困難中求得生存,我們總是一次又一次犯同樣的錯誤,這是因為資料庫領域還相對不成熟,是的,每個資料庫廠商都在做著各種不同的努力,但作為開發人員仍然要克服各種問題,無論是在sql server,oracle,db2,sybase,mysql資料庫,還是其它關聯式資料庫...

一條SQL語句的執行過程以及查詢效能的優化

一 mysql一條查詢語句的執行過程 客戶端傳送一條查詢給伺服器 伺服器西安檢查查詢快取,如果命中了快取,則立刻返回儲存在快取中的結果,否則進入下乙個階段 伺服器端進行sql解析,預處理 預處理器 再有優化器生成對應的執行計畫 mysql根據優化器生成的執行計畫,呼叫儲存引擎的api來進行查詢 將結...