程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL敕令優化須要記住的9點事項

SQL敕令優化須要記住的9點事項

編輯:MSSQL

SQL敕令優化須要記住的9點事項。本站提示廣大學習愛好者:(SQL敕令優化須要記住的9點事項)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL敕令優化須要記住的9點事項正文


與數據庫交互的根本說話是sql,數據庫每次解析和履行sql語句多須要履行許多步調。以sql server為例,當數據庫收到一條查詢語句時,語法剖析器會掃描sql語句並將其分紅邏輯單位(如症結詞、表達式、運算符和標識符)並生成查詢樹,最初查詢優化器將剖析一切可以拜訪數據庫的源表的辦法,從當選擇一組前往成果集最快且消費資本較少的步調。查詢樹隨即停止更新以精確記載這個步調,接著交由數據庫引擎開端履行,然後將查詢成果前往給用戶。可見數據庫引擎每次履行sql敕令都邑有很年夜的開支,假如提交的sql質量不高乃至有邏輯毛病就會形成無謂的開支和時光糟蹋。為了不這類情形,在應用sql敕令時應留意以下准繩:

   1、字段提取要依照“需若干、提若干”的准繩,防止“select *”,盡可能應用“select 字段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子句的寫法,必需斟酌語句次序,應當依據索引次序、規模年夜小來肯定前提子句的前後次序,盡量地讓字段次序與索引次序分歧,規模從年夜到小。

   7、盡可能應用“>=“,不消應用”>“

   8、在編寫sql語句之前懂得表的索引構造。有用天時用索引可以或許防止不用要的全表掃描,延長查詢時光。應當防止在where子句中應用is null、<>、!=、not、 not exist、not in、not like等敕令,他們平日會惹起全表掃描招致索引有效。

   9、在where 子句中,任何對列的操作(函數、盤算等)講招致索引掉效,這些操作應當盡量地移至等號左邊,如where substring(id,1,1)=‘a‘,應當寫成where id like 'a%‘;where result*10> 30應當寫成where result >30;

對sql敕令停止優化的根本准繩是盡可能削減類型轉換和盤算,充足應用表索引,削減全表掃描的次數。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved