首页 > 解决方案 > 使用 Aurora-MySQL 进行查询的问题适用于 MySQL

问题描述

我们有一个简单的查询来检查一个记录是否存在于一个具有另一个 id 的表中。如果是这样,它会返回 id。这适用于小型数据集,例如下面 Aurora 中的工作示例。

但是,如果我们有很多 id(比如 1000),第一个查询返回 0 行,第二个在 Aurora 中成功,但在 MySQL 上有效。

我们无法在 Aurora 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`);

标签: mysqlamazon-web-servicesamazon-aurora

解决方案


推荐阅读