深度优化sql 查询, 提升性能一百倍是什么概念?
正在做一個(gè)軟件設(shè)計(jì), 希望有個(gè)功能, 然而, 對(duì)于加上該功能后對(duì)系統(tǒng)性能造成的影響很是擔(dān)憂(yōu). 可以說(shuō)是, 一方面想要有這個(gè)功能, 另一方面又對(duì)性能問(wèn)題是否能夠解決很懷疑, 正處于猶豫不決狀態(tài).?
?
于是決定進(jìn)行實(shí)驗(yàn). 首先對(duì)表結(jié)構(gòu)和索引進(jìn)行了優(yōu)化, 初步結(jié)果還不錯(cuò), 性能基本進(jìn)入可接受的范圍. 然而, 這是面向一個(gè)百萬(wàn)千萬(wàn)用戶(hù)的系統(tǒng), 所以, 剛好處于邊緣狀態(tài)是遠(yuǎn)不夠的. 于是, 就借助于Sql Server Management Studio 的execution plan 顯示功能, 對(duì)查詢(xún)進(jìn)行了優(yōu)化. 為此, 在表中自動(dòng)的插入了一百萬(wàn)條記錄. 在接下來(lái)的一兩個(gè)小時(shí)內(nèi), 寫(xiě)出了同一個(gè)sql查詢(xún)功能的4個(gè)不同的版本, 居然把性能提高了一百多倍. 心里十分高興.
?
請(qǐng)看下圖中的數(shù)據(jù), 注意方框內(nèi)的數(shù)據(jù), 可以看到, 同樣的查詢(xún), 優(yōu)化程度不同, 有 190倍的執(zhí)行速度差異.
?
?
下圖是數(shù)據(jù)庫(kù)engine的執(zhí)行計(jì)劃圖:?
?
?大家知道, 數(shù)據(jù)庫(kù)在需要承擔(dān)大量用戶(hù)的網(wǎng)站軟件中, 對(duì)于性能而言, 處于關(guān)鍵地位. 為了提高數(shù)據(jù)庫(kù)的性能, 人們作出了多方面的努力, 包括scale up, scale out. ?然而 scale up 通常是很廢錢(qián)的, 比如, 一臺(tái)16個(gè)cpu的服務(wù)器, 比一個(gè)普通的4核心機(jī)器要貴出二十倍以上, 而且scale up的上限也很低, 常常不能滿(mǎn)足要求.? 而scale out, 通常, 要從軟件的架構(gòu)設(shè)計(jì)到編程做出一整套的安排, 在開(kāi)發(fā)上會(huì)增加成本. 如果能夠根據(jù)對(duì)數(shù)據(jù)庫(kù)engine的內(nèi)部算法的深入知識(shí), 對(duì)sql 查詢(xún)做優(yōu)化, 達(dá)到如此的性能提高, 實(shí)在是極其高效的.
轉(zhuǎn)載于:https://www.cnblogs.com/kakrat/archive/2010/12/29/1921125.html
總結(jié)
以上是生活随笔為你收集整理的深度优化sql 查询, 提升性能一百倍是什么概念?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【知识分享】异步调用与多线程的区别
- 下一篇: SCM基础之过程描述