程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL查詢效力留意事項小結

SQL查詢效力留意事項小結

編輯:MSSQL

SQL查詢效力留意事項小結。本站提示廣大學習愛好者:(SQL查詢效力留意事項小結)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL查詢效力留意事項小結正文


1、查詢前提准確,針對有參數傳入情形

2、SQL邏輯履行次序

  FROM-->JOIN-->WHERE-->GROUP-->HAVING-->DISTINCT-->ORDER-->TOP

3、橫向

查詢須要的字段
當在SQL語句中銜接多個表時,請應用表的別號並把別號前綴於每一個Column上如許一來,便可以削減解析的時光並削減那些由Column歧義惹起的語法毛病
4、少做反復任務

掌握統一語句的屢次履行,特殊是一些基本數據的屢次履行是許多法式員很少留意的
削減屢次的數據轉換
根絕不用要的子查詢和銜接表,子查詢在履行籌劃普通說明成外銜接,過剩的銜接表帶來額定的開支
5、關於零時表#與表變量@

假如語句很龐雜,銜接太多,可以斟酌用暫時表和表變量分步完成
假如須要屢次用到一個年夜表的統一部門數據,斟酌用暫時表和表變量暫存這部門數據
假如須要綜合多個表的數據,構成一個成果,可以斟酌用暫時表和表變量分步匯總這多個表的數據
關於暫時表和表變量的選擇,在數據量較多的情形下,暫時表的速度反而更快
SELECT INTO會比CREATE TABLE + INSERT INTO的辦法快,然則SELECT INTO會鎖定TEMPDB的體系表SYSOBJECTS、SYSINDEXES、SYSCOLUMNS,在多用戶並發情況下,輕易壅塞其他過程
6、子查詢

子查詢可以用IN、NOT IN、EXISTS、NOT EXISTS引入
NOT IN、NOT EXISTS的相干子查詢可以改用LEFT JOIN取代寫法
假如包管子查詢沒有反復 ,IN、EXISTS的相干子查詢可以用INNER JOIN 取代
IN的相干子查詢用EXISTS取代
7、索引

防止對索引字段停止盤算操作
SELECT ID FROM T WHERE NUM/2=100
應改成:
SELECT ID FROM T WHERE NUM=100*2
防止在索引字段上應用NOT,<>,!=
防止在索引列上應用IS NULL和IS NOT NULL
防止在索引列上湧現數據類型轉換
防止在索引字段上應用函數
防止樹立索引的列中應用空值
不要對索引字段停止多字段銜接
WHERE FAME+'. '+LNAME='HAIWEI.YANG'
應改成:
WHERE FNAME='HAIWEI' AND LNAME='YANG'
8、多表銜接

多表銜接的時刻,銜接前提必需寫全,寧可反復,不要罅漏
銜接前提盡可能應用集合索引
9、其他

在可使用UNION ALL的語句裡,應用UNION ALL
防止在WHERE子句中應用IN,NOT IN,OR
防止應用消耗資本的操作,帶有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL語句會啟動SQL引擎履行,消耗資本的排序(SORT)功效. DISTINCT須要一次排序操作, 而其他的至多須要履行兩次排序
LIKE ‘%5400%' 這類查詢不會援用索引,而LIKE ‘X5400%'則會援用規模索引。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved