百萬負載之SQL資料庫的優化

來源:互聯網
上載者:User

仲介交易 HTTP://www.aliyun.com/zixun/aggregation/6858.html">SEO診斷 淘寶客 雲主機 技術大廳

在考慮一個網站如果承載日百萬甚至千萬pv時,我們往往本能的往兩個方向考慮:靜態化及分散式。 固然,對於新浪等門戶類型的網站來說,靜態化+讀寫分離及分散式,可以解決大多數的問題。 可是我們面臨的更多的,可能是大資料+高併發+即時讀取,而靜態化的固定性便很難解決這個問題。

比如矮個芝麻最近接到的一個電子商務類的網站,流量大,資料量大,同時要求8206.html">即時更新,因為首頁以及內容頁往往每時每刻都在變化著。 這個時候我們就不得不查詢資料庫,也就需要針對資料庫作出一些特定的優化。

優化建議:

1)表結構的優化

通過對表結構的優化,往往可以直接的降低資料庫的壓力。 常見的方法比如建索引,拆表,適當冗余扁平化。 索引的作用最為直接,通過B+樹輕鬆實現類似于將一張表劃分為幾百張表的效果,在進行查詢時,往往鏈表查詢需要十萬次才能查詢到的資料,加了索引之後或許只需要四次就可以解決。

當然不要過分的增加索引,因為會一定程度上增加資料庫的負擔。 同時說一個很有意思的問題,如何實現身份證查詢系統?我們往往知道,身份證的前幾位決定了這個人的所在地,出生年月等可見資訊,然後才是幾位亂數。 而且應該有發現一個問題,那就是只有在戶口所在地才能登記身份證,這就是拆表查詢。 公安系統只需要查詢當地資料庫下該生日及亂數是否有重複,就可以判斷全國是否有重複的身份證了。

最常用的方法是,將一個月內的活躍使用者單獨設為一個表,這樣每次使用者登錄,其實只是查詢了當月的使用者,可以有效的提高查詢效率.

2)sql語句的優化

sql語句的優化往往要直白很多,就是儘量減少like查詢,關聯查詢等資源消耗比較大,查詢量比較大的sql語句,即可,整理了幾條如下:

1.減少不必要的like查詢,儘量通過建關鍵字表實現like查詢的效果

2.減少關聯查詢,儘量通過左連結右連結的形式實現查詢

3.複雜的查詢語句使用儲存過程解決.

4.減少不必要的查詢.

5.避免在索引列上使用IS Null和IS NOT Null

6.儘量避免使用耗費資源的操作:帶有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL語句會啟動SQL引擎

7.不要使用SELECT *,儘量指明要顯示的列

8.不要使用INSERT導入大批的資料 請不要這樣做,除非那是必須的。 使用UTS或者BCP,這樣你可以一舉而兼得靈活性和速度。

3)程式段的優化尤為重要

程式段根據不同的使用者需求進行優化,尤為重要.

最常見的案例就是,當查詢清單時,只查詢出標題名及簡介就可以解決問題.當使用者打開該文章後,才會查詢該文章的文章內容,評論,發表人資訊等關聯表的內容.這樣可以在很大程度上降低程式的負擔.

儘量通過ajax,在有必要的情況下進行後臺查詢,而不是在打開頁面的時候就進行相關的查詢.

另外,最為重要的一點就是,儘量實現靜態化.

一般對於cms類型的網站來說,靜態化可以解決大多數的問題.而後需要查詢資料庫的無非就是搜索,使用者會員中心的相關操作.

而搜索是可以通過讀寫分離非同步作業的,這樣就可以有效的降低伺服器的壓力.

當然,還有更多更有效的方法,只是今天突然興起整理一下,有問題可以和矮個芝麻一起溝通哦~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.