一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

數(shù)據(jù)庫的查詢優(yōu)化方法分析

 sunshineapril 2010-11-09

1. 盡量不要使用 or,使用or會引起全表掃描,將大大降低查詢效率。

2.alice like '%"&abigale&"%' 會使索引不起作用(針對sqlserver)

 

3.經(jīng)過實踐驗證,charindex()并不比前面加%的like更能提高查詢效率,并且charindex()會使索引失去作用(指sqlserver數(shù)據(jù)庫)

4.字段提取要按照“需多少、提多少”的原則,避免“select *”,盡量使用“select 字段1,字段2,字段3........”。實踐證明:每少提取一個字段,數(shù)據(jù)的提取速度就會有相應(yīng)的提升。提升的速度還要看您舍棄的字段的大小來判斷。

 

5. order by按聚集索引列排序效率最高。一個sqlserver數(shù)據(jù)表只能建立一個聚集索引,一般默認為ID,也可以改為其它的字段。

 

6.能使用exists和not exists盡量使用,避免使用in或not in

 

7.能使用表連接盡量使用,避免使用exists和not exists

 
8.SET NOCOUNT ON

 

9.正確使用UNION和UNION ALL

 

10.慎用SELECT DISTINCT

 

11.少用游標(biāo)

 

12. 使用表的別名(Alias):

 

當(dāng)在SQL語句中連接多個表時,請使用表的別名并把別名前綴于每個Column上,這樣可以減少解析的時間并減少那些由Column歧義引起的語法錯誤。

.盡量少使用游標(biāo)
     原因很簡單;就是游標(biāo)的算法是最原始的計算機算法(和for.if等語句一樣,一條條搜索來算;效率極低);
而sql語句用的是集合運算;速度則快的多;如果用索引速度則很快(用了指針).

2.創(chuàng)建索引.
a.聚集索引:
   聚集索引是磁盤存儲和邏輯顯示是一樣的
   mssql表的主鍵一般是聚集索引;主鍵(每一條記錄唯一確定);
   創(chuàng)建的主鍵自動會是聚集索引;
   如有一個非常大的表(有百萬行);很長時間磁盤存儲上會有類似碎片(磁盤填充率效率低;一般是頻繁刪除造成的);
    要提高它的性能的最簡潔辦法是:把這個表的主鍵去掉再保存后;然后重新設(shè)主鍵再保存;
    (這個表就會在磁盤上重新整理排序;性能當(dāng)然會提高喲)
b.非聚集索引:
   非聚集索引是在外面建立小的附加表(一種樹形結(jié)構(gòu);大多數(shù)是B或B+樹);
   讀(遍歷select等sql語句)表特快;但寫(update;delete.insert等sql語句)表性能會略微下降.
   針對數(shù)據(jù)量大的表建議非聚集索引不要超過3個(節(jié)省額外磁盤負擔(dān)).
   不要給類似“性別”列創(chuàng)建索引.

3.死鎖:
是指有線程在讀一條記錄;別的線程讀這條記錄就要等待;
在mssql中只要長期占那條記錄的線程去掉;死鎖就會解除.
在mssql中鎖是針對每一行記錄(所以性能不錯).
經(jīng)常產(chǎn)生鎖的原因有:
   a.在sql語句中使用事務(wù)語句(特別是事務(wù)中當(dāng)查詢比較耗時).
   b.在前臺的應(yīng)用程序的connetion沖突(未關(guān)閉).
   c.多表聯(lián)合查詢(尤其是在打開大的數(shù)據(jù)集時).

4.sql語句優(yōu)化
a.'is null' 'not' 'or' 'in'不會用索引
b.避免在索引列上使用計算或函數(shù)處理(索引會大失性能).還有'%';有的甚至?xí)饕阅?br>c.SELECT中避免使用 ‘ * ‘(寧可把需要字段列出來;而不要用*去把所有的字段都列出來).
d.避免相關(guān)子查詢(select中套select).
e.where的條件中'=>exists>in'(指性能)
f.'order by' 'group by' 'having' 'distinct'等語句要慎用(因為它們效率不高;它們是先把數(shù)據(jù)到臨時表中再進行處理的).
g.聚集索引如有2個字段組成(tt1和tt2);tt1在前面;where的條件中如只用tt1字段來判斷;就會用到一半的聚集索引;
   where的條件中如tt1和tt2字段都用來判斷了;就會全用到聚集索引;
   where的條件中如只用tt2字段來判斷;就會用不到聚集索引了;

5.盡量不要使用TEXT數(shù)據(jù)類型
   除非你使用TEXT處理一個很大的數(shù)據(jù),否則不要使用它。因為它不易于查詢,速度慢,用的不好還會浪費大量的空間。
   一般的,VARCHAR可以更好的處理你的數(shù)據(jù)。

6.盡量不要使用臨時表
   盡量不要使用臨時表,除非你必須這樣做。一般使用子查詢可以代替臨時表。使用臨時表會帶來系統(tǒng)開銷,
   如果前臺的代碼你是使用數(shù)據(jù)庫連接池而臨時表卻自始至終都存在。SQL Server提供了一些替代方案,比如Table數(shù)據(jù)類型。

7.盡量少使用外鍵和觸發(fā)器。
因為在mssql中這些功能的性能做得不是很好;隨便動一下表(它就會到相關(guān)的表去搞判斷;有很多情況并不需要);在后臺消耗資源大.
寧可在前臺多寫些相關(guān)表的操作的代碼.

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲精品一区二区三区免 | 日韩精品一区二区三区av在线| 精品人妻少妇二区三区| 中文字字幕在线中文乱码二区| 国产免费人成视频尤物| 亚洲深夜精品福利一区| 91人妻人人揉人人澡人| 夜夜嗨激情五月天精品| 日本99精品在线观看| 亚洲精品美女三级完整版视频| 久久亚洲成熟女人毛片| 人人妻人人澡人人夜夜| 精品偷拍一区二区三区| 大尺度激情福利视频在线观看| 日韩欧美第一页在线观看| 人妻一区二区三区多毛女| 国产一区二区精品高清免费| 中文字幕一区二区三区大片| 欧美不卡午夜中文字幕| 办公室丝袜高跟秘书国产| 自拍偷拍福利视频在线观看| 五月婷日韩中文字幕四虎| 国产偷拍盗摄一区二区| 国产精品欧美激情在线播放| 色哟哟精品一区二区三区| 五月天丁香亚洲综合网| 色婷婷成人精品综合一区| 东京热男人的天堂社区| 亚洲国产欧美久久精品| 亚洲天堂一区在线播放| 国产精品丝袜一二三区| 日韩亚洲激情在线观看| 亚洲高清一区二区高清| 中文字幕亚洲精品人妻| 免费久久一级欧美特大黄孕妇 | 中文字幕亚洲精品在线播放| 69精品一区二区蜜桃视频| 久久精品福利在线观看| 在线亚洲成人中文字幕高清| 久热久热精品视频在线观看| 久久99爱爱视频视频|