gpt4 book ai didi

mysql - 在 mysql 执行期间使用 IN 的替代方法

转载 作者:行者123 更新时间:2023-11-29 03:26:29 31 4
gpt4 key购买 nike

有没有在 mysql 中使用 IN 子句的替代方案-

我担心它效率不高。

如果我解释一下会更容易。

3 表:

TABLE ONE = USER
TABLE TWO = list of languages

TABLE THREE = connection table between above two (i.e THE language that users speak)

下面是我的查询

选择 你.名字

            FROM 
user u
WHERE

u.id IN (
SELECT user_id
FROM user_lang_join_table
WHERE lang_id = 4)

here are my tables and query in sqlFiddle

我的问题是我有一个包含数百万条记录的表。

因此,在此上下文中使用 IN 意味着我需要对每条记录重复上述练习。这显然效率不高

下面是我的表格;

CREATE TABLE IF NOT EXISTS `lang` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(80) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;


INSERT INTO `lang` (`id`, `name`) VALUES
(1, 'english'),
(2, 'french'),
(3, 'german'),
(4, 'Italian'),
(5, 'Spanish'),
(6, 'Portuguese');

CREATE TABLE IF NOT EXISTS `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(80) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

INSERT INTO `user` (`id`, `name`) VALUES
(1, 'tom'),
(2, 'cyril'),
(3, 'elain'),
(4, 'jerry'),
(5, 'susan'),
(6, 'micky');

CREATE TABLE IF NOT EXISTS `user_lang_join_table` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) DEFAULT NULL,
`lang_id` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=23 ;


INSERT INTO `user_lang_join_table` (`id`, `user_id`, `lang_id`) VALUES
(1, 4, 4),
(2, 3, 4),
(3, 2, 3),
(4, 2, 4),
(5, 3, 2),
(6, 1, 3),
(7, 4, 2),
(8, 5, 3),
(9, 4, 6),
(10, 3, 3),
(11, 2, 2),
(12, 3, 3);

最佳答案

IN 在最新版本的 MySQL 中变得更加高效。但是,您可以将其替换为 EXISTS 和相关的子查询:

SELECT u.name
FROM user u
WHERE EXISTS (SELECT 1
FROM user_lang_join_table uljt
WHERE uljt.lang_id = 4 AND uljt.user_id = u.id
);

对于此查询,您需要在 user_lang_join_table(user_id, lang_id) 上建立索引。

关于mysql - 在 mysql 执行期间使用 IN 的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35432840/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com