我有一个包含 3 列的表:年龄、姓名、昵称 我只想获取昵称+年龄中根本不存在姓名+年龄的姓名(+年龄)。
例如:如果表:DETAILS 包含 2 行:
- 年龄:5岁,姓名:苏子,昵称:苏子
- 年龄:2,名字:gil,昵称:g
查询将返回:年龄:2,姓名:吉尔
SELECT d1.AGE, d1.NAME
FROM DETAILS d1
WHERE d1.NAME NOT IN (SELECT d2.NICKNAME FROM DETAILS d2 WHERE d2.AGE = d1.AGE)
此查询仅针对小数据运行。 知道如何改进它吗?
最佳答案
SQL 查询性能的关键点是使用索引。所以你必须在查询/连接列中有索引,你需要使用它(通过连接)。
例如查询:
SELECT DISTINCT D1.AGE, D1.NAME
FROM DETAILS D1 LEFT JOIN DETAILS D2 ON D1.AGE = D2.AGE
WHERE D1.NAME <> D2.NICKNAME
请注意,您必须事先在 AGE、NAME 和 NICKNAME 列上创建索引才能充分受益于此查询。
关于mysql - 提高查询速度 : simple SELECT from SELECT in huge table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42644031/