久久无码中文字幕_日韩精品无码一本二本三_久久精品呦女暗网_欧美一级夜夜爽_久久精品国产99久久99久久久

18
2017/03

如何進行SQL優(yōu)化的方法和優(yōu)化技巧

發(fā)布時間:2017-03-18 16:19:02
發(fā)布者:xiangpeiyu
瀏覽量:
0

1、為什么要對SQL進行優(yōu)化:    我們開發(fā)的項目上線使用的初期,由于業(yè)務(wù)數(shù)據(jù)量相對較少,一些SQL的執(zhí)行效率對程序運行效率的影響不太明顯,而開發(fā)和運維人員也無法判斷SQL對程序的運行效率有多大,故很少針對SQL進行專門優(yōu)化。而隨著時間的積累,業(yè)務(wù)數(shù)據(jù)量的增多,SQL的執(zhí)行效率對程序運行效率的影響逐漸增大,此時對SQL的優(yōu)化就很有必要。

2、SQL優(yōu)化的準則:    這個我們可以使用一句話來總結(jié):SQL優(yōu)化的準則就是盡一切可能提高SQL的執(zhí)行效率,從而使得我們程序的運行速度很快。

3、SQL優(yōu)化的一些方法:① 設(shè)計數(shù)據(jù)庫表結(jié)構(gòu)時,要對表做數(shù)量級和性能影響預(yù)測和評估,表的字段盡量都設(shè)置default值,盡量避免default為null,主要防止在執(zhí)行SQL查詢時直接將查詢條件設(shè)置為null或者not null而導(dǎo)致數(shù)據(jù)庫放棄索引,直接全表掃描;② SQL條件中允許出現(xiàn)庫函數(shù)和左模糊查詢,sql條件中庫函數(shù)會導(dǎo)致數(shù)據(jù)庫執(zhí)行時放棄索引,直接全表掃描,而左模糊也是,直接就全表掃描了;③ 原則上,SQL條件中避免出現(xiàn)<>,in,not in,exists,not exists等操作符;④ 子查詢中的實際查詢結(jié)果要設(shè)置上限要求,且子查詢必須要有索引支持,否則子查詢也去掃描全表就悲劇了;⑤ 單個事務(wù)的SQL語句數(shù)量要有上限要求,不能前臺一個提交操作,后臺要去插入幾十張表的數(shù)據(jù),那如果是千萬級用戶數(shù),基本上就光去插入數(shù)據(jù)了;⑥ 同上一條類似,單條SQL語句的數(shù)據(jù)影響量也要有上限要求,不能一個update操作更新了上千條數(shù)據(jù);⑦ 盡量減少多表關(guān)聯(lián)的SQL,如果必須使用多表關(guān)聯(lián),也盡量減少關(guān)聯(lián)的表數(shù)量,且多表關(guān)聯(lián)時,關(guān)聯(lián)字段必須包含在查詢索引中。多表關(guān)聯(lián)SQL中盡量不要使用視圖和代理表;⑧ 充分利用索引,嚴禁出現(xiàn)表掃描。同時,創(chuàng)建表時也注意索引的字段順序。

4、其他的話: 一般情況下,不同的行業(yè)數(shù)據(jù)量水平相對而言是比較固定的,比如電信行業(yè)的數(shù)據(jù)主要以用戶數(shù)為基準,按照省級行政單位劃分,數(shù)量級在千萬到億級之間。而法院的數(shù)據(jù)主要以案件數(shù)為基準,按照市級行政單位劃分,數(shù)量級在百萬到千萬之間。(這里只是簡要描述一下,實際數(shù)據(jù)量比這個大得多啊~)一般情況下,系統(tǒng)上線前都會針對不同行業(yè)不同地區(qū)的數(shù)據(jù)量做一個估算,然后再通過超大數(shù)據(jù)量對系統(tǒng)進行性能測試。但是如果遇到技術(shù)升級更新或者部署方式發(fā)生改變(比如數(shù)據(jù)集中存放到云上或者分布式部署改為大集中部署),那數(shù)據(jù)量幾乎是十倍百倍的增長,這時候前期SQL執(zhí)行效率的問題就會暴露出來。


關(guān)鍵詞:
返回列表