mysql - 提高查询速度 : simple SELECT from SELECT in huge table

标签 mysql sql sqlyog

我有一个包含 3 列的表:年龄、姓名、昵称 我只想获取昵称+年龄中根本不存在姓名+年龄的姓名(+年龄)。

例如:如果表:DETAILS 包含 2 行:

  1. 年龄:5岁,姓名:苏子,昵称:苏子
  2. 年龄: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/

相关文章:

mysql - 如何修复 NOT NULL 错误(错误代码 : 1064)?

MySQL - 只获取记录哪些用户ID在一列中有两个特定的不同值

python - 来自 MySQL 的 utf-8 文本未显示在 IPython Notebook 中

执行 MySQL 命令时,bash 拒绝 MySQL 访问

mysql - 优化分组依据和日期功能

mysql - SQL:计算出现次数并对列上的主查询进行分组

sql - Oracle - 从表中选择 n-1 条记录

sql - MySQL,需要一些关于我的比赛查询的性能建议

sql - 使用 OR 术语在 sqlite/JOIN 中进行高效的变体记录选择

php - 在一个php脚本中将数据插入到两个表中