MySQL中merge表儲存引擎用法

2021-07-29 12:01:59 字數 2050 閱讀 9599

在mysql資料庫中,merge表有點類似於檢視。mysql的merge引擎型別允許你把許多結構相同的表合併為乙個表。之後,你可以執行查詢,從多個表返回的結果就像從乙個表返回的結果一樣。每乙個合併的表必須有完全相同表的定義和結構。

mysql merge表的優點:

a. 分離靜態的和動態的資料

b. 利用結構接近的的資料來優化查詢

c. 查詢時可以訪問更少的資料

d. 更容易維護大資料集

e. 可以通過修改.mrg檔案來修改merge表,當然也可以用alter進行修改,修改後要通過flush tables重新整理表快取,此法可以動態增加減少子表

merge表儲存引擎在如下這種使用場合會最為有用:

如果需要把日誌記錄不停的錄入mysql資料庫,並且每天、每週或者每個月都建立乙個單一的表,而且要製作來自多個表的合計查詢,merge表這時會非常有效。然而,這項功能有侷限性。你只能合併myisam表而且必須嚴格遵守相同的表定義的限制。雖然這看起來好像是乙個大問題,但是,如果你使用另外一種表型別(例如innodb),這種合併可能就不需要.

下面定義如下幾個表:

基本表:

create table test_merge_1(

id int(5) not null,

value varchar(100) not null,

primary key(id)

);create table test_merge_2(

id int(5) not null,

value varchar(100) not null,

primary key(id)

);merge表:

create table test_merge(

id int(5) not null,

value varchar(100) not null,

primary key(id)

) type=mrg_myisam insert_method=last union=(test_merge_1,test_merge_2);

說明:

1. 此表結構必須與基本表完全一致,包括列名、順序。union表必須同屬乙個database。

2. 此表類似於sql中的union機制。

3. 基本表型別必須是myisam的。

4. 可以通過修改.mrg檔案來修改merge表,每個基本表的名字佔一行。注意:修改後要通過flush tables重新整理表快取。

5. 對基本表的更改可以直接反映在此表上。

6. insert_method的取值可以是: 0 不允許插入 first 插入到union中的第乙個表 last 插入到union中的最後乙個表。(4.0之後可用)

7. 定義在它上面的約束沒有任何作用,約束是由基本表控制的,例如兩個基本表中存在著同樣的乙個key值,那麼在merge表中會有兩個一樣的key值。

注意:

1.如果是通過修改.mrg檔案的方式來修改merge表,那麼一定要修改後要通過flush tables重新整理表快取,否則修改不會生效。最近犯過一次這樣的錯誤。

2.在資料量、查詢量較大的情況下,不要試圖使用merge表來達到類似於oracle的表分割槽的功能,會很影響效能。我的感覺是和union幾乎等價。

3.查詢結果及順序與建立merge表時聯合表的順序有關。

假設有這樣兩條個語句:

insert into test_merge_1(id,value) values(1,'ciray');

insert into test_merge_2(id,value) values(1,'blog.csdn.net/ciray');

然後,這個查詢:

select * from test_merge where id=1;

將只會得到一條記錄(1,'ciray'),並不是兩條記錄,也不會是(1,'blog.csdn.net/ciray')。這是因為id是 primary key,如果在第乙個表中查詢到記錄,則不在後面的表中記錄查。如果id並沒有定義唯一性約束,則這個查詢會得到兩條記錄。

mysql儲存引擎靜態表 mysql儲存引擎

儲存引擎是mysql資料庫最重要的特性之一,使用者可以根據自身需求選擇合適的儲存引擎,例如 是否支援事務 批量插入速度 行級鎖或者表級鎖等相關特性。mysql預設支援很多種不同的儲存引擎,使用者在建立表的時候根據表的作用可以指定不同的儲存引擎。在mysql5.5之前預設儲存引擎都是myisam,5....

mysql 分表,分割槽,分庫相關及merge引擎

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

Mysql的merge表型別

將多個表在邏輯上當作乙個表 建立後有兩個檔案,frm 表結構定義 mrg union表的名字清單 兩個基本表 create table merge 1 id int 5 not null,name varchar 100 not null,primary key id create table me...