merge儲存引擎把一組myisam資料表當做乙個邏輯單元來對待,讓我們可以同時對他們進行查詢。構成乙個merge資料表結構的各成員myisam資料表必須具有完全一樣的結構。每乙個成員資料表的資料列必須按照同樣的順序定義同樣的名字和型別,索引也必須按照同樣的順序和同樣的方式定義。
假設你有幾個日誌資料表,他們內容分別是這幾年來每一年的日誌記錄項,他們的定義都是下面這樣,yy代表年份:
create table log_yy
( dt datetime not null,
info varchar(100) not null,
index (dt)
) engine = myisam;
假設日誌資料表的當前集合包括 log_2004、log_2005、log_2006、log_2007 ,而你可以建立乙個如下所示的merge資料表把他們歸攏為乙個邏輯單元:
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選項列出了將被收錄在這個merge資料表離得各有關資料表。把這個merge建立出來後,就可以像對待任何其他資料表那樣查詢它,只是每一次查詢都將同時作用與構成它的每乙個成員資料表 。下面這個查詢可以讓我們知道上述幾個日誌資料表的資料行的總數:
select count(*) from log_merge;
下面這個查詢用來確定在這幾年裡每年各有多少日誌記錄項:
select year(dt) as y, count(*) as entries from log_merge group by y;
除了便於同時引用多個資料表而無需發出多條查詢,merge資料表還提供了以下一些便利。
merge資料表也支援delete 和update操作。insert操作比較麻煩,因為mysql需要知道應該把新資料行插入到哪乙個成員表裡去。在merge資料表的定義裡可以包括乙個insert_method選項,這個選項的可取值是no、first、last,他們的含義依次是insert操作是被禁止的、新資料行將被插入到現在union選項裡列出的第乙個資料表或最後乙個資料表。比如說,以下定義將對log_merge資料表的insert操作被當作對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包括進來:
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);
MySQL Merge儲存引擎
merge儲存引擎同意將一組使用myisam儲存引擎的而且表結構同樣 即每張表的字段順序 欄位名稱 字段型別 索引定義的順序及其定義的方式必須同樣 的資料表合併為乙個表,方便了資料的查詢。如果有log 2004 log 2005 log 2006 log 2007 這四張日誌記錄表,其資料各自是每一...
MySQLMerge儲存引擎
merge儲存引擎把一組myisam資料表當做乙個邏輯單元來對待,讓我們可以同時對他們進行查詢。構成乙個merge資料表結構的各成員myisam資料表必須具有完全一樣的結構。每乙個成員資料表的資料列必須按照同樣的順序定義同樣的名字和型別,索引也必須按照同樣的順序和同樣的方式定義。merge儲存引擎允...
MySQL MERGE儲存引擎 簡介
merge儲存引擎把一組myisam資料表當做乙個邏輯單元來對待,讓我們可以同時對他們進行查詢。構成乙個merge資料表結構的各成員myisam資料表必須具有完全一樣的結構。每乙個成員資料表的資料列必須按照同樣的順序定義同樣的名字和型別,索引也必須按照同樣的順序和同樣的方式定義。假設你有幾個日誌資料...