mysql分表


一,先說一下為什么要分表
當一張表的數據達到幾百萬時,查詢一次所花的時間會變多,如果有聯合查詢的話,我想有可能會死在那兒了。分表的目的就在於此,減小數據庫的負擔,縮短查詢時間。

根據個人經驗,mysql執行一個sql的過程如下:1、接收sql;2、把sql放到排隊隊列中;3、執行sql;4、返回執行結果。
在這個執行過程中最花時間在什么地方呢?第一,是排隊等待的時間,第二,sql的執行時間。其實這二個是一回事,等待的同時,肯定有sql在執行。所以我們要縮短sql的執行時間。

mysql中有一種機制是表鎖定和行鎖定,為什么要出現這種機制,是為了保證數據的完整性,我舉個例子來說吧,如果有二個sql都要修改同一張表的同一條數據,這個時候怎么辦,是不是二個sql都可以同時修改這條數據呢?很顯然mysql對這種情況的處理是,一種是表鎖定(myisam存儲引擎),一個是行鎖定(innodb存儲引擎)。表鎖定表示你們都不能對這張表進行操作,必須等我對表操作完才行。行鎖定也一樣,別的sql必須等我對這條數據操作完了,才能對這條數據進行操作。如果數據太多,一次執行的時間太長,等待的時間就越長,這也是我們為什么要分表的原因。

二,分表 1,做mysql集群,例如:利用mysql cluster ,mysql proxy,mysql replication,drdb等等
有人會問mysql集群,跟分表有什么關系?雖然它不是實際意義上的分表,但是它啟到了分表的作用,做集群的意義是什么呢?為一個數據庫減輕負擔,說白了就是減少sql排隊隊列中的sql的數量,舉個例子:有10個sql請求,如果放在一個數據庫服務器的排隊隊列中,他要等很長時間,如果把這10個sql請求,分配到5個數據庫服務器的排隊隊列中,一個數據庫服務器的隊列中只有2個,這樣等待時間是不是大大的縮短了呢?這已經很明顯了。 

優點:擴展性好,沒有多個分表后的復雜操作 缺點:單個表的數據量還是沒有變,一次操作所花的時間還是那么多,硬件開銷大。 2,預先估計會出現大數據量並且訪問頻繁的表,將其分為若干個表
這種訂單、用戶資金流水的表,時間長了這些表肯定很大,幾十萬,幾百萬都有可能。像這樣的情況很多。所以這種能預估出來的大數據量表,我們就事先分出個N個表,這個N是多少,根據實際情況而定。 

優點:避免一張表出現幾百萬條數據,縮短了一條sql的執行時間。 缺點:當一種規則確定時,打破這條規則會很麻煩,擴展性很差。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM