Соединение MySQL с федеративным представлением не работает

#mysql #join #federated-table

#mysql #Присоединиться #федеративная таблица

Вопрос:

Я хочу объединить таблицу с представлением, где одна таблица L является локальной, тогда как представление F FEDERATED это представление, находящееся на другом сервере:

 SELECT * FROM L LEFT JOIN F ON L.id = F.id;
  

Теперь соединение не приводит к совпадениям, несмотря на то, что на самом деле существует много совпадений между таблицей и представлением. Поле ID равно bigint .

Разочарованный, я создал TEMPORARY таблицу T и сбросил все из F нее, создав таким образом локальную копию F . Используя T вместо F , СОЕДИНЕНИЕ работает так, как ожидалось. Но процесс создания T потребляет память и время.

Каковы могут быть возможные причины такого странного поведения MySQL?


Определения таблиц:

 CREATE TABLE `L` (
  `id` bigint(20) NOT NULL,
  `id2` bigint(20) NOT NULL,
  PRIMARY KEY (`id`,`id2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  

и (эта таблица фактически является представлением на удаленном сервере):

 CREATE TABLE `F` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `field1` bigint(20) NOT NULL,
   ...
  `field5` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='mysql://userName:pword...';
  

Комментарии:

1. Используете ли вы MySQL NDB? Каков контекст?

2. @AlmaDo: таблицы InnoDB. Локальный сервер — 5.1.54-1ubuntu4, федеративный сервер — 5.5.35-0ubuntu0.12.04.2.

3. Пожалуйста, добавьте определения ваших таблиц

4. @AlmaDo: Теперь я думаю, что знаю, что вызвало проблему. Объединенная таблица на самом деле была представлением. По-видимому, объединения в федеративных представлениях не работают. Прошу прощения, что не обнаружил раньше. Спасибо за вашу помощь, это помогло мне лучше разобраться в этом вопросе.

5. С federated движком у вас должен быть table DDL на обоих серверах — так что — да, ПРЕДСТАВЛЕНИЕ не применимо

Ответ №1:

Как указано в определении того, что FEDERATED такое механизм хранения, у вас должно быть определение структуры таблицы (например .frm , файлы для MyISAM) на обоих серверах. Это потому, что так FEDERATED работает движок:

введите описание изображения здесь

Поэтому вы не можете использовать VIEW , поскольку оно имеет совершенно другой смысл и структуру. Поэтому вместо этого вы должны зеркально отобразить свою таблицу, и тогда вы сможете использовать ее в своих запросах.