轉(zhuǎn)帖|其它|編輯:郝浩|2010-12-10 14:03:58.000|閱讀 599 次
概述:對(duì)于web應(yīng)用開(kāi)發(fā),多數(shù)性能瓶頸均出現(xiàn)在數(shù)據(jù)庫(kù)上,除了采用分布式架構(gòu)或云處理(大公司基本上都是),更重要的是平時(shí)程序設(shè)計(jì)時(shí)要遵照一些規(guī)則,從根本上提高系統(tǒng)的性能,以下總結(jié)了一些常用的規(guī)則方法,僅供參考。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
對(duì)于web應(yīng)用開(kāi)發(fā),多數(shù)性能瓶頸均出現(xiàn)在數(shù)據(jù)庫(kù)上,除了采用分布式架構(gòu)或云處理(大公司基本上都是),更重要的是平時(shí)程序設(shè)計(jì)時(shí)要遵照一些規(guī)則,從根本上提高系統(tǒng)的性能,以下總結(jié)了一些常用的規(guī)則方法,僅供參考。
1、 把數(shù)據(jù)、日志、索引放到不同的I/O設(shè)備上,增加讀取速度。數(shù)據(jù)量(尺寸)越大,提高I/O越重要。
2、 縱向、橫向分割表,減少表的尺寸,如:可以把大數(shù)據(jù)量的字段拆分表。
3、 根據(jù)查詢條件,建立索引,優(yōu)化索引、優(yōu)化訪問(wèn)方式,限制結(jié)果集的數(shù)據(jù)量。注意填充因子要適當(dāng)(最好是使用默認(rèn)值0)。索引應(yīng)該盡量小,盡量使用字節(jié)數(shù)小的列建索引,不要對(duì)有限的幾個(gè)值的列建單一索引。
4、 用OR的字句可以分解成多個(gè)查詢,并且通過(guò)UNION鏈接多個(gè)查詢。它們的速度只與是否使用索引有關(guān),如果查詢需要用到聯(lián)合索引,用UNION all執(zhí)行的效率更高。
5、 在查詢SELECT語(yǔ)句中用WHERE子句限制返回的行數(shù),避免表掃描。如果返回不必要的數(shù)據(jù),則浪費(fèi)了服務(wù)器的I/O資源,加重了網(wǎng)絡(luò)的負(fù)擔(dān),降低了性能。如果表很大,在表掃描期間將表鎖住,禁止其他的聯(lián)結(jié)訪問(wèn)表,后果很?chē)?yán)重。
6、 注意使用DISTINCT,在沒(méi)有必要時(shí)不要用,它同UNION一樣會(huì)使查詢變慢。
7、 在IN后面值的列表中,將出現(xiàn)最頻繁的值放在最前面,出現(xiàn)最少的放在最后面,減少判斷的次數(shù)。
8、 一般在GROUP BY和HAVING子句之前就能剔除多余的行,所以盡量不要用它們來(lái)做剔除行的工作,也就是說(shuō)盡可能在WHERE中過(guò)濾數(shù)據(jù)。
9、 盡量將數(shù)據(jù)的處理工作放在服務(wù)器上,減少網(wǎng)絡(luò)的開(kāi)銷(xiāo),如使用存儲(chǔ)過(guò)程。存儲(chǔ)過(guò)程是編譯、優(yōu)化過(guò),并且被組織到一個(gè)執(zhí)行規(guī)劃里,且存儲(chǔ)在數(shù)據(jù)庫(kù)中的SQL語(yǔ)句(存儲(chǔ)過(guò)程是數(shù)據(jù)庫(kù)服務(wù)器端的一段程序),是控制流語(yǔ)言的集合,速度當(dāng)然快。
10、 不要在一句話里再三地使用相同的函數(shù),浪費(fèi)資源,將結(jié)果放在變量里再調(diào)用更快。
11、 針對(duì)大量只讀查詢操作進(jìn)行優(yōu)化的方法:
12、 對(duì)于SQL語(yǔ)句書(shū)寫(xiě)時(shí)的一些建議:
SELECT * FROM dbo.Users
DECLARE @USER_ID INT
,@USER_NAME VARCHAR(50)
,@PASSWORD VARCHAR(50)
SELECT @USER_ID = 1001
,@USER_NAME = 'xiaojun.liu'
SELECT @USER_ID = 1001
,@USER_NAME = 'xiaojun.liu'
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:博客轉(zhuǎn)載