У нас есть простой запрос, который проверяет, существует ли запись в одной таблице с идентификатором другой. Если это так, он возвращает идентификатор. Это работает для небольших наборов данных, таких как рабочий пример ниже в 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`);