SQL Server數(shù)據(jù)庫(kù)查詢速度慢的原因有很多,常見(jiàn)的有以下幾種:
創(chuàng)新互聯(lián)主要從事網(wǎng)頁(yè)設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、成都響應(yīng)式網(wǎng)站建設(shè)公司、程序開(kāi)發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、微信小程序定制開(kāi)發(fā)等,憑借多年來(lái)在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷(xiāo)經(jīng)驗(yàn),集策劃、開(kāi)發(fā)、設(shè)計(jì)、營(yíng)銷(xiāo)、管理等多方位專業(yè)化運(yùn)作于一體。
1、沒(méi)有索引或者沒(méi)有用到索引(這是查詢慢最常見(jiàn)的問(wèn)題,是數(shù)據(jù)庫(kù)設(shè)計(jì)的缺陷)
2、I/O吞吐量小,形成了瓶頸效應(yīng)。
3、沒(méi)有創(chuàng)建計(jì)算列導(dǎo)致查詢不優(yōu)化。
4、內(nèi)存不足
5、網(wǎng)絡(luò)速度慢
6、查詢出的數(shù)據(jù)量過(guò)大(可以采用多次查詢,其他的方法降低數(shù)據(jù)量)
7、鎖或者死鎖(這也是查詢慢最常見(jiàn)的問(wèn)題,是程序設(shè)計(jì)的缺陷)
8、sp_lock,sp_who,活動(dòng)的用戶查看,原因是讀寫(xiě)競(jìng)爭(zhēng)資源。
9、返回了不必要的行和列
10、查詢語(yǔ)句不好,沒(méi)有優(yōu)化
●可以通過(guò)以下方法來(lái)優(yōu)化查詢 :
1、把數(shù)據(jù)、日志、索引放到不同的I/O設(shè)備上,增加讀取速度,以前可以將Tempdb應(yīng)放在RAID0上,SQL2000不在支持。數(shù)據(jù)量(尺寸)越大,提高I/O越重要。
2、縱向、橫向分割表,減少表的尺寸(sp_spaceuse)
3、升級(jí)硬件
4、根據(jù)查詢條件,建立索引,優(yōu)化索引、優(yōu)化訪問(wèn)方式,限制結(jié)果集的數(shù)據(jù)量。注意填充因子要適當(dāng)(最好是使用默認(rèn)值0)。索引應(yīng)該盡量小,使用字節(jié)數(shù)小的列建索引好(參照索引的創(chuàng)建),不要對(duì)有限的幾個(gè)值的字段建單一索引如性別字段。
不需要Item_Photo字段數(shù)據(jù),那么我們可以修改SQL,只取我們需要的字段數(shù)據(jù),就可以避免這個(gè)問(wèn)題,提高SQL性能,另外根據(jù)我的經(jīng)驗(yàn),開(kāi)發(fā)人員習(xí)慣性使用SELECT *,從不管那些數(shù)據(jù)是需要還是不需要的,先全部取過(guò)來(lái)再說(shuō),這種習(xí)慣性行為確實(shí)不是一個(gè)好習(xí)慣。
通常情況下,即在數(shù)據(jù)庫(kù)的數(shù)據(jù)量,服務(wù)器硬件都在承受范圍內(nèi),進(jìn)行的是:1.語(yǔ)句調(diào)優(yōu),包括創(chuàng)建索引,優(yōu)化語(yǔ)句的實(shí)現(xiàn)方式使執(zhí)行計(jì)劃更流暢2.表結(jié)構(gòu)變更,即在語(yǔ)句級(jí)別的調(diào)優(yōu)沒(méi)有辦法滿足性能要求的時(shí)候不得不采用的措施.包括表的拆分,橫向拆分,縱向拆分等 還有其他的一些比較大的改動(dòng),包括服務(wù)器遷移,讀寫(xiě)分離,分布式規(guī)劃等等
SQLServer性能監(jiān)控
這套性能優(yōu)化的清單將至少準(zhǔn)科學(xué)的幫助你找出你的SQLServer任何明顯的性能問(wèn)題。說(shuō)是這樣說(shuō),SQLServer的性能調(diào)優(yōu)仍然是很困難的。我試圖用這套清單去找出“容易”的sqlserver性能問(wèn)題,困難的留待稍后。我這樣做是因?yàn)楹苋菀讓⑷菀缀屠щy的的性能調(diào)優(yōu)問(wèn)題搞混。通過(guò)列出一個(gè)“容易” 的性能調(diào)優(yōu)范圍,就很容易的將這些問(wèn)題解決,一旦解決了這些容易的問(wèn)題,那么你就能集中去解決更困難的問(wèn)題。
使用這個(gè)SQLServer性能調(diào)優(yōu)清單的一個(gè)好處是,它將不僅僅告訴你目前最容易解決的性能問(wèn)題是什么,而且還幫助你正確的去解決。在某種程度上,你可以選擇不同的順序進(jìn)行。換句話說(shuō),你可以故意做出特殊的決定而不是按照清單通常的順序進(jìn)行。某種意義上說(shuō)你是對(duì)的,不是所有的性能調(diào)優(yōu)建議都適合所有的情形。另外,你的決定是基于你的資源限制,例如沒(méi)有足夠的錢(qián)去買(mǎi)滿足負(fù)荷的硬件。如果真是那樣的話,你就別無(wú)選擇了。還有,你的決定可能基于一些政治原因,那是你不得不作出的改變。不管怎樣,你需要知道你能做什么,使用這個(gè)性能調(diào)優(yōu)清單找出你能改變的范圍并做出相應(yīng)的改變提升你的SQLServer的性能。
一般來(lái)說(shuō),你將在你的每一個(gè)SQL服務(wù)器上執(zhí)行這個(gè)清單。如果遇到清單中的一些問(wèn)題,這會(huì)花掉你一些時(shí)間。我建議你從目前性能問(wèn)題最多的的服務(wù)器開(kāi)始,然后當(dāng)你有時(shí)間的時(shí)候按照自己的思路去解決其他服務(wù)器。
一旦你完成了,可仍然有很多事情要去做。記住,這些只是一些容易的。一旦你完成了這些容易的,接下來(lái)你需要花時(shí)間去解決更困難問(wèn)題。
怎樣進(jìn)行你的SQLServer性能調(diào)優(yōu)呢?
為了使其變得容易,我把它們分成了以下幾個(gè)部分:
使用性能監(jiān)視器找出硬件瓶頸
SQLServer硬件性能監(jiān)控列表
操作系統(tǒng)性能監(jiān)控列表
SQLServer2000配置性能監(jiān)控列表
數(shù)據(jù)庫(kù)配置設(shè)置性能監(jiān)控列表
索引性能監(jiān)控列表
應(yīng)用程序和T-SQL性能監(jiān)控列表
SQLServer數(shù)據(jù)庫(kù)作業(yè)性能監(jiān)控列表
使用Profiler找出低效的查詢
怎樣最好的實(shí)現(xiàn)SQLServer性能監(jiān)控
管理你的SQLServe性能的最好方法是首先回顧上面每一部分的內(nèi)容,把它們打印出來(lái)。然后完成每一部分的內(nèi)容,寫(xiě)下你收集到的結(jié)果。你也可以按照你喜歡的順序進(jìn)行。上面的步驟僅僅列出了我執(zhí)行的順序,因?yàn)槟菢油ǔD苓_(dá)到一個(gè)比較好的效果。
一旦你完成其中一部分,你可以按照在清單中發(fā)現(xiàn)的不同的建議進(jìn)行你的性能優(yōu)化工作。然后你將在后面的部分學(xué)到更多。
一、建立索引
二、建立存儲(chǔ)過(guò)程
三、只查詢您所需要的數(shù)據(jù),不要把所有數(shù)據(jù)都查詢出來(lái),防止數(shù)據(jù)冗余。
四、對(duì)于大量及海量數(shù)據(jù)一般還要建立分區(qū)