mysql分表與分割槽

2021-06-15 08:30:16 字數 2121 閱讀 2895

1、首先得確認mysql是否支援分割槽功能,這可以通過命令:show plugins

檢視如果顯示如下,

則說明你的mysql版本支援partition

2、innodb一般用於具有事務和外來鍵的場合,它預設將所有的表資料和索引檔案放在乙個名為ibdata1的檔案中,屬於共享表空間。myisam預設每個表都會有乙個.frm表描述檔案和乙個.ibd檔案,屬於獨佔表空間。分割槽必須是獨佔表空間,所以要想把innodb引擎表分割槽,須先將innodb設定為獨佔表空間,這需要修改配置檔案,在/etc/mysql/my.cnf中新增一行innodb_file_per_table=1;並去掉相應行的注釋符,重啟服務。通過show engines命令可知,mysql預設的儲存引擎為innodb,修改預設儲存引擎方法為:在/etc/mysql/my.cnf的[mysqld]下面新增:default-storage-engine = myisam重啟mysql服務,即可設定mysql資料庫的預設引擎為myisam

3、建立乙個只含有id欄位的t1表,並用hash方式分為5個區(前提是已經存在乙個test資料庫):

在id上建立乙個索引in_id

此時desc t1的結果應該如下:

然後往表t1裡面快速插入一千萬行資料:先執行:insert into t1 values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)然後多次執行:insert into t1 select * from t1即可當然,也可以寫乙個儲存過程來達到此目的在這插入的過程中,我們可以重新開啟乙個終端來觀察插入時的動態:先切換到test資料庫儲存位置:cd /var/lib/mysql/test然後執行:watch -n1 -ls -lh,你會看到乙個動態的列表。

插入完畢時,我們可以看到表中的資料不再變化,索引表的大小明顯大於資料表的大小,這就告訴我們索引是在犧牲儲存空間的前提下提高處理速度的,所以索引不是建得越多越合理;(注:t1.frm指表的檔案結構,t1.par指表已經做了分割槽儲存,而每個分割槽包括.myd和.myi兩個表,.myd表用來儲存資料,.myi表用來儲存索引,這種儲存策略能保證儲存速度更快。)

對已分割槽表查詢:

對未分割槽表查詢:

結論:由上圖可知,查詢條件相同時,分割槽情況下只影響了798458行,未分割槽情況下影響了8000000行(整個表),這是因為,分割槽以後,會直接從滿足條件的分區內進行查詢,而對於不滿足條件的分割槽予以忽略。所以,對於大資料量的情況下,分割槽能明顯加快查詢速度!

繼續往下走:給兩個表的c3列建立索引

解析查詢語句發現:建立索引以後,兩者在影響的行數、消耗的時間等方面的差距很小。

新增乙個沒有索引的字段約束,分割槽的優勢又明顯的體現出來;經過查詢解析發現,導致這一結果的原因同上:分割槽縮小了查詢範圍。

mysql 分表分割槽

一 分表 1 垂直分割 就是將乙個表按照欄位來分,每張表保證有相同的主鍵就好。一般來說,將常用字段和大字段分表來放。優勢 比沒有分表來說,提高了查詢速度,降低了查詢結果所用記憶體 劣勢 沒有解決大量記錄的問題,對於單錶來說隨著記錄增多,效能還是下降很快 2 水平分割 水平分割是企業最常用到的,水平拆...

MySQL分割槽和分表

1.分割槽的型別 1 range 把連續區間按範圍劃分 例 create table user id int 11 money int 11 unsigned not null,date datetime partition by range year date partition p2014 va...

mysql分表和表分割槽詳解

為什麼要分表和分割槽?日常開發中我們經常會遇到大表的情況,所謂的大表是指儲存了百萬級乃至千萬級條記錄的表。這樣的表過於龐大,導致資料庫在查詢和插入的時候耗時太長,效能低下,如果涉及聯合查詢的情況,效能會更加糟糕。分表和表分割槽的目的就是減少資料庫的負擔,提高資料庫的效率,通常點來講就是提高表的增刪改...