第一階段:1,一定要正確設計索引
2,一定要避免sql語句全表掃瞄,所以sql一定要走索引(如:一切的 > < != 等等之類的寫法都會導致全表掃瞄)
3,一定要避免 limit 10000000,20 這樣的查詢
4,一定要避免 left join 之類的查詢,不把這樣的邏輯處理交給資料庫
5,每個表索引不要建太多,大資料時會增加資料庫的寫入壓力
第二階段:
1,採用分表技術(大表分小表)
a)垂直分表:將部分字段分離出來,設計成分表,根據主表的主鍵關聯
b)水平分表:將相同欄位表中的記錄按照某種hash演算法進行拆分多個分表
2,採用mysql分割槽技術(必須5.1版以上,此技術完全能夠對抗oracle),與水平分表有點類似,但是它是在邏輯層進行的水平分表
第三階段(伺服器方面):
1,採用memcached之類的記憶體物件快取系統,減少資料庫讀取操作
2,採用主從資料庫設計,分離資料庫的讀寫壓力
3,採用squid之類的**伺服器和web快取伺服器技術
ps:由於篇幅問題,我只簡單說一些基本概念,其實裡面每個知識點關係到的內容都很多。特別是第一階段,很多任務作幾年的程式設計師,都不能完全理解。我覺得要真正理解索引,最好的辦法就是在1000w-億級以上的資料,進行測試sql語句,再結合 explain 命令進行檢視sql語句索引情況。
如何處理MySQL每月5億的資料
第一階段 1,一定要正確設計索引 2,一定要避免sql語句全表掃瞄,所以sql一定要走索引 如 一切的 等等之類的寫法都會導致全表掃瞄 3,一定要避免 limit 10000000,20 這樣的查詢 4,一定要避免 left join 之類的查詢,不把這樣的邏輯處理交給資料庫 5,每個表索引不要建太...
MySQL如何處理死鎖
官方定義如下 兩個事務都持有對方需要的鎖,並且在等待對方釋放,並且雙方都不會釋放自己的鎖。這個就好比你有乙個人質,對方有乙個人質,你們倆去談判說換人。你讓對面放人,對面讓你放人。看到這裡,也許你會有這樣的疑問,事務和談判不一樣,為什麼事務不能使用完鎖之後立馬釋放呢?居然還要操作完了之後一直持有鎖?這...
mysql處理死鎖 mysql如何處理死鎖問題
mysql有兩種死鎖處理方式 1 等待,直到超時 innodb lock wait timeout 50s 2 發起死鎖檢測,主動回滾一條事務,讓其他事務繼續執行 innodb deadlock detect on 由於效能原因,一般都是使用死鎖檢測來進行處理死鎖。死鎖檢測 死鎖檢測的原理是構建乙個...