Mysql使用Merge引擎分表 方式及優缺點

2022-05-15 11:29:34 字數 2122 閱讀 6761

merge:是sql語句的一種。具體來說,merge語句會檢查原資料表記錄和目標表記錄。如果記錄在原資料表和目標表中均存在,則目標表中的記錄將被原資料表中的記錄所更新(執行update操作);如果目標表中不存在的某(些)記錄,在原資料表中存在,則原資料表的這(些)記錄將被插入到目標表中(執行insert操作)

一,先說一下為什麼要分表

當一張表的資料達到幾百萬時,你查詢一次所花的時間會很慢,此時用分表的方法可以減小單錶查詢的負擔,縮短查詢時間。

mysql執行sql的過程如下:

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

為了保證資料的完整性mysql中有一種機制是表鎖定和行鎖定,myisam儲存引擎是表鎖定,innodb儲存引擎是行鎖定。表鎖定表示你們都不能對這張表進行操作,必須等我對錶操作完才行。行鎖定也一樣,別的sql必須等我對這條資料操作完了,才能對這條資料進行操作。如果資料太多,一次執行的時間太長,等待的時間就越長,這也是我們為什麼要分表的原因。

二、使用merge儲存引擎優缺點

優點:1.查詢數度比一張大表查詢要快很多

1.引用多個資料表而無需發出多條查詢,只用查詢merge引擎這張表就可以查到所有。

2.適用於儲存日誌資料。例如,可以將不同月份的資料存入不同的表,然後使用myisampack工具壓縮資料減少空間,最後通過merge表查詢仍可以像往常那樣工作。

3.可以更方便的維護,修復單個的小表要比修復大資料表更加容易。

4.多個子表對映至乙個總表的速度極快。因為merge表本身不會儲存和維護任何索引,索引都是由各個關聯的子表儲存和維護的,所以建立和重新對映merge表的速度非常快。

缺點:1.總表(merge表)必須使用mrg_myisam儲存引擎,子表必須使用myisam儲存引擎,不可避免會受到myisam儲存引擎的限制,myisam不支援事務操作。

2.merge表不能使用某些myisam特性。例如,子表可建立全文索引,merge表查詢不能使用全文索引

3.一張表對應三個檔案,1000個分表就是對應3000個檔案,這樣檢索起來也會變的很慢

4.若使用alter table語句修改merge表,那麼會立即丟失總表和子表的對映關係,並且會將所有子表的資料拷貝至修改後的新錶。

5.子表之間不能保證唯一鍵約束,只能保證單個子表內部的唯一性約束。

6.子表不支援分割槽(partition)。

7.不支援insert delayed插入延時語句。

三、使用merge儲存引擎來實現分表

1.子表必須使用myisam儲存引擎,每個子表的表結構必須相同。

create table log_2001

( id int not null auto_increment,

dt datetime not null,

info varchar(100) not null,

primary key(id),

index (dt)

) engine = myisam;

create table log_2002 like log_2001;

2.建立merge表,merge表的表結構必須與各個子表結構相同,merge資料表也支援delete 、update、insert操作。merge資料表的定義裡可以包括乙個insert_method選項,這個選項的可取值是no、first、last,他們的含義依次是禁止插入、插入到第乙個字表、插入到最後乙個字表。

create table log_merge

( id int not null auto_increment,

dt datetime not null,

info varchar(100) not null,

primary key(id),

index (dt)

) engine = merge union = (log_2001, log_2002)

insert_method = first;

3.建立乙個新的子表,並讓他有同樣的表結構,然後修改log_merge資料表把新子表包括進來,注意union表必須同屬乙個database

Mysql通過Merge引擎進行分表

分表的id不能是自增 auto increment 的 分表必須使用myisam儲存引擎 每個分表的表結構必須相同 mysql必須具有儲存分表資料檔案和索引檔案的目錄的讀寫許可權 必須啟用mysql的符號鏈結支援功能。總表的表結構必須與各個分表相同 總表必須使用mrg myisam儲存引擎 總表不會...

MySQL 儲存引擎 MERGE 的介紹

最近在搞乙個 專案,每個站點每月的資料量近150 200萬條記錄,因為採用站點和日期分表機制來減輕伺服器的壓力,但專案中又必須對全部站點以及跨日期進行查詢資料功能。merge儲存引擎型別允許把許多結構相同的表合併為乙個大表。然後,你可以執行查詢,從多個表返回的結果就像從乙個表返回的結果一樣,從而不需...

Mysql的MERGE儲存引擎詳解

merge 儲存引擎把一組 myisam 資料表當做乙個邏輯單元來對待,讓我們可以同時對他們進行查詢。構成乙個 merge 資料表結構的各成員 myisam 資料表必須具有完全一樣的表結構。每乙個成員資料表的資料列必須按照同樣的順序定義同樣的名字和型別,索引也必須按照同樣的順序和同樣的方式定義。假設...