Mysql合並表原理


1.概述:

合並表是一種早期的、簡單的分區實現,和分區表相比有一些不同的限制,並且缺乏優化。分區表嚴格來說是一個邏輯上的概念,用戶無法訪問底層的各個分區,對用戶來說分區是透明的。但是合並表允許用戶單獨訪問各個子表。分區表和優化器的結合更緊密,這也是未來發展的趨勢,而合並表則是一種將要被淘汰的技術,在未來的版本中可能被刪除。

2.原理:

合並表相當於一個容器,里面包含了多個真實表,可以在CREATE TABLE中使用一種特別的UNION語法來制定包含哪些真實表。下面是一個創建合並表的例子:

create table t1(a int not null primary key)engine=MyIsam;
create table t2(a int not null primary key)engine=MyIsam;
insert into t1(a) values(1),(2);
insert into t2(a) values(1),(2);
create table mrg(a int not null primary key)
engine=merge union=(t1,t2) insert_method=last;
select a from mrg;  

注意到,這里最后建立的合並表和前面的各個真實表字段完全相同,在合並表中有索引各個真實子表也有,這是創建合並表的前提條件,另外需要注意到,各個子表在對應列上都有主鍵限制,但是最終的合並表中仍然出現了重復值,這是合並表的另一個不足,合並表中的每一個子表行為和表定義都是相同,但是合並表在全局上並不受這些條件限制。

合並表的局限:

1)在使用create語句創建一個合並表的時候,並不會檢查各個子表的兼容性。如果子表的定義稍有不同,那么mysql就可能創建出一個后面無法使用的合並表。

另外,如果在成功創建了合並表后再修改某個字段的定義,那么之后再使用合並表可能會報錯;

2)根據合並表的特性,不難發現,在合並表上無法使用replace語法,無法使用自增字段

3)執行范圍查詢時,需要在每一個子表上各執行一次,這比直接訪問單個表的性能要差很多,而且子表越多,性能越糟糕

4)全表掃描和普通表的全表掃描速度相同

5)在合並表上做唯一鍵和主鍵查詢時,一旦找到一行數據就會停止,所以一旦查詢在合並表的某一個子表中找到一行數據,就會立即返回,不會再訪問任何其他的表

6)子表的讀取順序和create table語句中的順序相同,如果需要頻繁地按照某個特定順序訪問表,那么可以通過這個特性來讓合並排序操作更高效

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM