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 中有数百万条数据,那么这也可能会卡住一段时间。
我有一个数据库 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 中有数百万条数据,那么这也可能会卡住一段时间。