RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

7.2 Таблицы MERGE

Таблицы 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. Это намного быстрее и сохранит много места на диске.
  • Можно обойти ограничения размера файла для операционной системы.
  • Вы можете создавать псевдоним (синонимы) для таблицы использованием 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 и на всех основных таблицах, чтобы вынудить драйвер прочитать новый файл определения.

Поиск

 

Найди своих коллег!