Проблема с запросом с помощью Aurora- MySQL работает с MySQL - PullRequest
0 голосов
/ 12 марта 2020

У нас есть простой запрос, который проверяет, существует ли запись в одной таблице с идентификатором другой. Если это так, он возвращает идентификатор. Это работает для небольших наборов данных, таких как рабочий пример ниже в Aurora.

Однако, если у нас много идентификаторов (например, 1000), первый запрос возвращает 0 строк, а второй выполняется в Aurora успешно, но работает на MySQL.

Нам не удалось увидеть каких-либо оптимизаций или других пробелов в Авроре MySQL, которые могли бы объяснить это поведение. Любой совет или руководство приветствуется.

Рабочий пример:

CREATE TABLE `test_table_1` (
  `id` char(36) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE `test_table_2` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `test_table_1_id` char(36) COLLATE utf8mb4_unicode_ci NOT NULL,
  `another_id` char(36) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `test_table_1_id_foreign` (`test_table_1_id`),
  KEY `another_id_index` (`another_id`),
  CONSTRAINT `test_table_1_id_foreign` FOREIGN KEY (`test_table_1_id`) REFERENCES `test_table_1` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `test_table_1` (`id`)
VALUES
('e54b3097-21ff-4d7d-8bee-5aa62e66d9b6'),
('4fada427-ef5a-455d-ad55-831de6192dc1');

INSERT INTO `test_table_2` (`test_table_1_id`, `another_id`)
VALUES
('e54b3097-21ff-4d7d-8bee-5aa62e66d9b6', 'aeef668e-1365-41e8-a4a7-026d9a021935'),
('4fada427-ef5a-455d-ad55-831de6192dc1', '61e7b307-e356-4537-bcc5-927c3c217992');


SELECT * FROM `test_table_1`
WHERE `id` = 'e54b3097-21ff-4d7d-8bee-5aa62e66d9b6' 
AND EXISTS (
    SELECT * FROM `test_table_2`
    WHERE `test_table_2`.`another_id` = 'aeef668e-1365-41e8-a4a7-026d9a021935'
    AND `test_table_2`.`test_table_1_id` = `test_table_1`.`id`);

SELECT * FROM `test_table_1`
WHERE `id` = '4fada427-ef5a-455d-ad55-831de6192dc1' 
AND EXISTS (
    SELECT * FROM `test_table_2`
    WHERE `test_table_2`.`another_id` = '61e7b307-e356-4537-bcc5-927c3c217992'
    AND `test_table_2`.`test_table_1_id` = `test_table_1`.`id`);
...