與資料庫互動的基本語言是sql,資料庫每次解析和執行sql語句多需要執行很多步驟。以sql server為例,當資料庫收到一條查詢語句時,語法分析器會掃瞄sql語句並將其分成邏輯單元(如關鍵詞、表示式、運算子和識別符號)並生成查詢樹,最後查詢優化器將分析所有可以訪問資料庫的程式設計客棧源表的方法,從中選擇一組返回結果集最快且消耗資源較少的步驟。查詢樹隨即進行更新以準確記錄這個步驟,接著交由資料庫引擎開始執行,然後將查詢結果返回給使用者。可見資料庫引擎每次執行sql命令都會有很大的開銷,如果提交的sql質量不高甚至有邏輯錯誤就會造成無謂的開銷和時間浪費。為了避免這種情況,在使用sql命令時應注意以下原則:
1、字段提取要按照「需多少、提多少」的原則,避免「select *」,盡量使用「s程式設計客棧elect 欄位1,欄位2,欄位3 ...」。實踐證明,每少提取乙個字段,資料庫提取速度就會有相應的提公升。提公升的速度還要由你捨棄的字段大小來決定。
2、盡量使用exists代替select count(*) 來判斷是否存在記錄。優化器優化exists謂詞時支援短路功能。只要找到一行,不需要再掃瞄其他行就可以確定該錶是否包涵行了。count函式只有在統計表中所有行的行數時使用。
3、盡量使用(not) exists代替(not) in 操作,in的sql效能總是比較低的。
--語句
select dname,deptno from dept where deptno not in(select deptno from emp where dept.deptno=emo.deptno)
--語句
select dname,deptno from dept where not exists(select deptno from emp where dept.deptno=emo.deptno)
4、盡量使用not in,可以用left outer join代替它。
5、盡量不要使用or,使用or會引起全表掃瞄,將大大降低查詢效率
6、注意where子句的寫法,必須考慮語句順序,應該根據索引順序、範圍大小來確定條件子句的前後順序,盡可能地讓字段順序與索引順序一致,範xnltr圍從大到小。
7、盡量使用「>=「,不用使用」>「
8、在編寫sql語句之前了解表的索引結構。有效地利用索引能夠避免不必要的全表掃瞄,縮短查詢時間。應該避免在where子句中使用is null、<>、!=、not、 not exist、not in、not like等命令,他們通常會引起全表掃瞄導致索引無xnltr效。
9、在where 子句中,任何對列的操作(函式、計算等)講導致索引失效,這些操作應該盡可能地移至等號右邊,如where substring(id,1,1)=『a『,應該寫成where id like 'a%『;where result*10> 30應該寫成where result >30;
對sql命令進行優化的基本原則是儘量減少型別轉換和計算,充分利用表索引,減少全表掃瞄的次數。
本文標題: sql命令優化需要記住的9點事項
本文位址: /shujuku/mssql/112529.html
Hadoop fs必需要記住的常用命令
1,hadoop fs fs local 宣告hadoop使用的檔案系統,如果不宣告的話,使用當前配置檔案配置的,按如下順序查詢 hadoop jar裡的hadoop default.xml hadoop conf dir下的hadoop default.xml hadoop conf dir下的h...
QTP的那些事 一些需要記住的雜談實踐經驗
1,windows 7安裝 現了一些意外的問題,最主要的要歸結到windows 7設定的許可權問題,無法錄製 具體的操作許可權的方式,見下圖所示 2,測試中得到的預期結果和實際結果列印的時候是相同的,可是在採用if比對的時候始終都是不相同的,可能的情況就是預期的字串沒有前後的空格,而對於實際的獲取到...
當專案經理需要修煉的9件事
作為專案經理,最重要的就是帶領整個專案團隊一起戰鬥,做好團隊建設,才能激發整個團隊成員的士氣,提高團隊成員的績效。然而,在中國,很多專案經理並不具備專案經理的基本素質或者知識技能。這裡有乙個很明顯的對比,在國外,專案經理是受人景仰的,只有經驗豐富的受人尊敬的專家才能成為專案經理。而在中國,專案經理往...