国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

SQL查詢效率注意事項小結

2024-08-31 00:57:49
字體:
來源:轉載
供稿:網友
一、查詢條件精確,針對有參數傳入情況

二、SQL邏輯執行順序

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

三、橫向

查詢需要的字段
當在SQL語句中連接多個表時,請使用表的別名并把別名前綴于每個Column上這樣一來,就可以減少解析的時間并減少那些由Column歧義引起的語法錯誤
四、少做重復工作

控制同一語句的多次執行,特別是一些基礎數據的多次執行是很多程序員很少注意的
減少多次的數據轉換
杜絕不必要的子查詢和連接表,子查詢在執行計劃一般解釋成外連接,多余的連接表帶來額外的開銷
五、關于零時表#與表變量@

如果語句很復雜,連接太多,可以考慮用臨時表和表變量分步完成
如果需要多次用到一個大表的同一部分數據,考慮用臨時表和表變量暫存這部分數據
如果需要綜合多個表的數據,形成一個結果,可以考慮用臨時表和表變量分步匯總這多個表的數據
關于臨時表和表變量的選擇,在數據量較多的情況下,臨時表的速度反而更快
SELECT INTO會比CREATE TABLE + INSERT INTO的方法快,但是SELECT INTO會鎖定TEMPDB的系統表SYSOBJECTS、SYSINDEXES、SYSCOLUMNS,在多用戶并發環境下,容易阻塞其他進程
六、子查詢

子查詢可以用IN、NOT IN、EXISTS、NOT EXISTS引入
NOT IN、NOT EXISTS的相關子查詢可以改用LEFT JOIN代替寫法
如果保證子查詢沒有重復 ,IN、EXISTS的相關子查詢可以用INNER JOIN 代替
IN的相關子查詢用EXISTS代替
七、索引

避免對索引字段進行計算操作
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'
八、多表連接

多表連接的時候,連接條件必須寫全,寧可重復,不要缺漏
連接條件盡量使用聚集索引
九、其他

在可以使用UNION ALL的語句里,使用UNION ALL
避免在WHERE子句中使用IN,NOT IN,OR
避免使用耗費資源的操作,帶有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL語句會啟動SQL引擎執行,耗費資源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要執行兩次排序
LIKE ‘%5400%' 這種查詢不會引用索引,而LIKE ‘X5400%'則會引用范圍索引。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 满城县| 桑植县| 安多县| 长白| 嘉荫县| 高邑县| 双辽市| 隆子县| 黑山县| 延川县| 东乡县| 申扎县| 嘉义市| 黄浦区| 南宫市| 苏尼特右旗| 西乌珠穆沁旗| 谷城县| 马尔康县| 达尔| 永兴县| 曲水县| 渭南市| 鄄城县| 黄陵县| 旬阳县| 山阴县| 民乐县| 北安市| 秦皇岛市| 大兴区| 锡林郭勒盟| 手游| 惠州市| 临澧县| 凌源市| 义马市| 翁牛特旗| 佳木斯市| 阜南县| 蓝山县|