| |
Таблицы MERGE
представляют собой новшество MySQL Version
3.23.25. Их код пока находится в отладке, но в основном уже работает.
Таблица MERGE
представляет собой совокупность идентичных
таблиц MyISAM
, которые могут использоваться как одна. Вы можете
выполнять только операции SELECT
, DELETE
и
UPDATE
над совокупностью таблиц. Если Вы выполняете
DROP
для таблицы MERGE
, удаляется только
определение для таблицы MERGE
.
Под идентичными таблицами понимается, что все таблицы созданы с идентичной
информацией о ключах и столбцах. Вы не можете помещать MERGE поверх таблиц,
где столбцы упакованы по-разному, не имеют точно те же самые столбцы, или
имеют ключи в ином порядке. Некоторые из таблиц могут быть сжаты
myisampack
.
Когда Вы создаете таблицу MERGE
, Вы получите файл
.frm
определения таблицы и файл .MRG
списка таблиц.
Файл .MRG
содержит только список индексных файлов (файлы
.MYI
), которые должны использоваться как один. Все используемые
таблицы должны быть в той же самой базе данных, что и таблица типа
MERGE
.
Вы должны иметь привилегии SELECT
, UPDATE
и
DELETE
на таблицах, которые Вы отображаете на таблицу
MERGE
.
MERGE
-таблицы, могут помогать Вам решить следующие проблемы:
myisampack
, а затем создавать
MERGE
, чтобы использовать их как один.
MERGE
-таблица на этом
могла бы быть намного быстрее, чем использование большой таблицы. Вы можете,
конечно, также использовать RAID для получения аналогичного результата.
MERGE
с перекрываниями.
MERGE
, чем огромную базу данных.
MERGE
использует индексы индивидуальных таблиц. Не требуется поддерживать общий
индекс. Это делает такие таблицы ОЧЕНЬ быстрыми. Обратите внимание, что Вы
должны определить описания ключа, когда Вы создаете таблицу
MERGE
!
MERGE
. Это намного быстрее и сохранит много места на диске.
Недостатки таблиц MERGE
:
INSERT
на таблицах
MERGE
, поскольку MySQL не может знать, в которую из таблиц Вы
должны вставить строку.
MyISAM
для
таблицы MERGE
.
MERGE
используют большое количество описателей
файла. Если Вы применяете MERGE, чтобы отобразить более,
чем 10 таблиц, и 10 пользователей применяют это, Вам понадобится 10*10+10=110
описателей (дескрипторов) файла (10 файлов данных для 10 пользователей и еще
10 для общедоступных индексных файлов).
MERGE
будет должен выдать чтение на всех основных таблицах,
чтобы проверить, которая наиболее близко соответствует данному ключу. Если Вы
затем делаете 'read-next', драйвер таблицы будет должен искать буфера чтений,
чтобы найти следующий ключ. Только, когда один буфер ключей будет исчерпан,
драйвер начнет читать следующий блок. Это делает ключи MERGE
намного медленнее при поиске eq_ref
, но не намного медленнее при
поиске ref
.
DROP TABLE
, ALTER
TABLE
или DELETE FROM table_name
без предложения
WHERE
на любой таблицы, которая отображена на открытую таблицу
MERGE
. Если Вы это сделаете, таблица MERGE
все еще
может обратиться к первоначальной таблице, и Вы получите совершенно
непредвиденные результаты.Следующий пример показывает, как использовать таблицы MERGE
:
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, message CHAR(20)); CREATE TABLE t2 (a INT AUTO_INCREMENT PRIMARY KEY, message CHAR(20)); INSERT INTO t1 (message) VALUES ("Testing"),("table"),("t1"); INSERT INTO t2 (message) VALUES ("Testing"),("table"),("t2"); CREATE TABLE total (a INT NOT NULL, message CHAR(20), KEY(a)) TYPE=MERGE UNION=(t1,t2);
Обратите внимание, что мы не создавали ключ UNIQUE
или
PRIMARY KEY
в таблице total
, поскольку ключ не
собирается быть уникальным в таблице total
.
Обратите внимание, что Вы можете также управлять файлом .MRG
вне сервера MySQL:
shell> cd /mysql-data-directory/current-database shell> ls -1 t1.MYI t2.MYI > total.MRG shell> mysqladmin flush-tables
Теперь Вы можете делать следующее:
mysql> select * from total; +---+---------+ | a | message | +---+---------+ | 1 | Testing | | 2 | table | | 3 | t1 | | 1 | Testing | | 2 | table | | 3 | t2 | +---+---------+
Чтобы повторно отобразить таблицу MERGE
, Вы можете делать
одно из следующего:
DROP
и пересоздайте ее.
ALTER TABLE table_name UNION(...)
.
.MRG
и выдайте FLUSH TABLE
на
таблице MERGE
и на всех основных таблицах, чтобы вынудить
драйвер прочитать новый файл определения.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |