merge儲存引擎同意將一組使用myisam儲存引擎的而且表結構同樣(即每張表的字段順序、欄位名稱、字段型別、索引定義的順序及其定義的方式必須同樣)的資料表合併為乙個表,方便了資料的查詢。
如果有log_2004、log_2005、log_2006、log_2007 這四張日誌記錄表,其資料各自是每一年的資料,表結構例如以下(yy代表年份):
create table log_yy (
dt datetime not null,
info varchar(100) not null,
index (dt)
) engine = myisam;
能夠通過例如以下sql語句把這些表歸攏為乙個邏輯單元:
create table log_merge(
dt datetime not null,
info varchar(100) not null,
index(dt)
) engine = merge union = (log_2004, log_2005, log_2006, log_2007);
說明:engine選項的值必須是merge;union選項列出了將被收錄在這個log_merge資料表的全部表。
該log_merge表建立成功後,就能夠像普通表那樣查詢它。僅僅是每一次查詢都將同一時候作用於構成它的每個成員資料表 。譬如查詢這些日誌資料表的資料行總數:
select count(*) from log_merge;
譬如查詢每年各有多少日誌記錄:
select year(dt) as y, count(*) as entries from log_merge group by y;
建立merge儲存引擎的表也支援delete 和update操作。insert操作比較麻煩,由於mysql須要知道應該把新資料行插入到哪乙個成員表裡去。在merge儲存引擎資料表的定義裡能夠包含乙個insert_method選項(mysql4.0之後支援),這個選項的值有no、first、last三個,其含義依次是禁止insert操作、將資料行插入到union中的第乙個表或將資料行插入到union中的最後乙個表。比方以下sql語句指定將新資料加入到log_2007資料表----它是union選項所列出的最後乙個資料表:
create table log_merge(
dt datetime not null,
info varchar(100) not null,
index(dt)
) engine = merge union = (log_2004, log_2005, log_2006, log_2007)
insert_method = last;
建立乙個新的成員資料表log_2009並讓它有同樣的表結構,然後改動log_merge資料表把log_2009包含進來:
create table log_2009 like log_2008;
alter table log_merge
union = (log_2004, log_2005, log_2006, log_2007,log_2008,log_2009);
注意:使用merge「合併」起來的表結構同樣的表最好不要有主鍵,否則會出現這樣的情況:一共同擁有兩個成員表,其主鍵在兩個表中存在同樣情況,可是寫了一條按同樣主鍵值查詢的sql語句,這時僅僅能查到union列表中第乙個表中的資料。 MySQLMerge儲存引擎
merge儲存引擎把一組myisam資料表當做乙個邏輯單元來對待,讓我們可以同時對他們進行查詢。構成乙個merge資料表結構的各成員myisam資料表必須具有完全一樣的結構。每乙個成員資料表的資料列必須按照同樣的順序定義同樣的名字和型別,索引也必須按照同樣的順序和同樣的方式定義。merge儲存引擎允...
MySQL MERGE儲存引擎 簡介
merge儲存引擎把一組myisam資料表當做乙個邏輯單元來對待,讓我們可以同時對他們進行查詢。構成乙個merge資料表結構的各成員myisam資料表必須具有完全一樣的結構。每乙個成員資料表的資料列必須按照同樣的順序定義同樣的名字和型別,索引也必須按照同樣的順序和同樣的方式定義。假設你有幾個日誌資料...
MySQL MERGE儲存引擎 簡介
merge儲存引擎把一組myisam資料表當做乙個邏輯單元來對待,讓我們可以同時對他們進行查詢。構成乙個merge資料表結構的各成員myisam資料表必須具有完全一樣的結構。每乙個成員資料表的資料列必須按照同樣的順序定義同樣的名字和型別,索引也必須按照同樣的順序和同樣的方式定義。假設你有幾個日誌資料...