仲介交易 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類型的網站來說,靜態化可以解決大多數的問題.而後需要查詢資料庫的無非就是搜索,使用者會員中心的相關操作.
而搜索是可以通過讀寫分離非同步作業的,這樣就可以有效的降低伺服器的壓力.
當然,還有更多更有效的方法,只是今天突然興起整理一下,有問題可以和矮個芝麻一起溝通哦~