MySQL 子查询:同一 table 优化的多个查询

MySQL Subquery: multiple queries on same table optimization

我有一个数据库 table 我想搜索两次,第一次是建立一个符合特定条件的条目列表,然后使用该列表限制我的第二个显示所有条目的条目匹配 'name'

下面的查询可以满足我的要求,但它需要很长时间,有没有更优化运行的简单替代方法?

SELECT * FROM voting WHERE name IN (SELECT name FROM voting WHERE yob=15)

我也试过了,

SELECT * FROM voting WHERE name = (SELECT name FROM voting WHERE yob=15)

这根本不起作用,但我认为显示了我想做的事情的逻辑。谢谢

您可以切换到使用 exists:

SELECT v.*
FROM voting v
WHERE EXISTS (SELECT 1 FROM voting v2 WHERE v2.name = v.name AND yob = 15);

对于此查询,您需要 voting(name, yob) 上的索引。

你也可以试试这个,但应该有索引。

SELECT a.* FROM voting a JOIN
(SELECT DISTINCT NAME FROM voting WHERE yob=15) AS b
WHERE a.name = b.name;

如果您的 table 中有数百万条数据,那么这也可能会卡住一段时间。