SQL語句優化方法詳細介紹
1. 選擇最有效率的表名順序, FROM子句中寫在最後的表(基礎表 driving table)將被最先處理,在FROM子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表.汗顏!!以前以為dimensional table,都是多條記錄呢,怪不得以前寫的查詢速度這麼慢。
e子句中的連接順序.:
數據庫採用自下而上的順序解析Where子句,根據這個原理,表之間的連接必須寫在其他Where條件之前, 那些可以過濾掉最大數量記錄的條件必須寫在Where子句的末尾NG最後。這個貌似一直這麼寫的,不過那是在SQLSERVER裏面的,前面都是用的JOIN
3.整合簡單,無關聯的數據庫訪問:
如果你有幾個簡單的數據庫查詢語句,你可以把它們整合到一個查詢中(即使它們之間沒有關係),這個我沒有體會,貌似都是按照業務邏輯把它們分成了一小塊一小塊的呢
4.儘量縮小子查詢的結果。
5.用EXISTS替代IN、用NOT EXISTS替代NOT IN。貌似我做項目的時候只在少數基於條件的表連接才會用EXISTS,基本不用IN 和NOT IN。
6.避免在索引列上使用計算.
Where子句中,如果索引列是函數的一部分.優化器將不使用索引而使用全表掃描. 7,用>=替代> 這個我也不是特別明白,>是IS NOT?
8,用UNION替換OR (適用於索引列)
通常情況下, 用UNION替換Where子句中的OR將會起到較好的效果. 對索引列使用OR將造成全表掃描. 注意, 以上規則只針對多個索引列有效. 如果有column沒有被索引, 查詢效率可能會因為你沒有選擇OR而降低. 在下面的'例子中, LOC_ID 和REGION上都建有索引.這個在項目中我是有遇到過的,我寫了個臨時表的函數,其他的SQL需要和臨時表連接起來,因為業務邏輯比較複雜,連接的時候速度很慢,後來把OR都改成了UNION ALL
9,避免在索引列上使用IS NULL和IS NOT NULL
10,避免改變索引列的類型
11. 需要當心的Where子句:
某些Select 語句中的Where子句不使用索引. 這裏有一些例子.
在下面的例子裏, (1)‘!=' 將不使用索引. 記住, 索引只能告訴你什麼存在於表中, 而不能告訴你什麼不存在於表中. (2) ‘||'是字符連接函數. 就象其他函數那樣, 停用了索引.
(3) ‘+'是數學函數. 就象其他數學函數那樣, 停用了索引. (4)相同的索引列不能互相比較,這將會啟用全表掃描.
12. 優化GROUP BY:提高GROUP BY 語句的效率, 可以通過將不需要的記錄在GROUP BY 之前過濾掉.
13. 避免使用耗費資源的操作:
帶有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL語句會啟動SQL引擎
執 行耗費資源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要執行兩次排序. 通常, 帶有UNION, MINUS , INTERSECT的SQL語句都可以用其他方式重寫. 如果你的數據庫的SORT_AREA_SIZE調配得好, 使用UNION , MINUS, INTERSECT也是可以考慮的, 畢竟它們的可讀性很強
SSMS,If you want to see how much cpu time did one query consumed,you can use the following flow:
SET STATISTICS IO ON
set statistics time on
execute your query
set statistics time off
and after this you have to look messages window not results window
-
如何理解Javascript的caller,callee,call,apply區別
在提到上述的概念之前,首先想説説javascript中函數的隱含參數:argumentsarguments該對象代表正在執行的函數和調用它的函數的參數。[function.]arguments[n]參數function:選項。當前正在執行的Function對象的名字。n:選項。要傳遞給Function對象的從0開始的參數值...
-
JavaScript基本語法分析
一、JavaScript基本語法。(一)數據類型與變量類型。整數,小數,佈局,字符串,日期時間,數組強制轉換:parseInt()parseFloat()isNaN()(二)數組var數組名=newArray([長度]);//“假冒”數組th-長度a[下標]=值。a[下標](三)函數複製代碼代碼如下:function函數名(形參){}function...
-
dreamweaver的學習心得
當我們備受啟迪時,寫心得體會是一個不錯的選擇,這樣我們可以養成良好的總結方法。那麼要如何寫呢?下面是小編收集整理的dreamweaver的學習心得,歡迎閲讀與收藏。dreamweaver的學習心得1目前,互聯網是最快捷的信息傳播渠道之一,學習網頁製作成了學生必須掌握的一項技...
-
Dreamweaver輸入的文本字體怎樣加粗
Dreamweaver輸入的文本字體怎麼加粗?Dreamweaver中想要加粗輸入的文本,該怎麼加粗呢?這都是最基礎的教程,很簡單,需要的朋友可以參考下,下面就跟隨小編一起來看看吧!Dreamweaver怎麼給字體加粗,下面我們就來看看詳細的.教程。1、打開我的軟件2、文件新建一個3、新建...