首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提高查询速度:大表中的简单选择

问提高查询速度:大表中的简单选择
EN

Stack Overflow用户
提问于 2017-03-07 09:01:46
回答 3查看 285关注 0票数 1

我有一个表包含3列:年龄、名称、昵称,我只想得到name+age在nickname+age中根本不存在的名称(+ age )。

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

  1. 年龄:5岁,姓名: suzi,昵称: suzi
  2. 年龄:2,姓名:吉尔,昵称:G

查询将返回: age:2,name : gil

代码语言:javascript
复制
SELECT d1.AGE, d1.NAME
FROM DETAILS d1
WHERE d1.NAME NOT IN (SELECT d2.NICKNAME FROM DETAILS d2 WHERE d2.AGE = d1.AGE)

此查询仅在小数据上运行。知道怎么改进吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-07 09:23:33

SQL查询性能的关键点是使用索引。因此,您必须在查询/连接列中使用索引,并且需要使用它(通过联接)。

例如,查询:

代码语言:javascript
复制
SELECT DISTINCT D1.AGE, D1.NAME
FROM DETAILS D1 LEFT JOIN DETAILS D2 ON D1.AGE = D2.AGE
WHERE D1.NAME <> D2.NICKNAME

请注意,您必须事先对列年龄、名称和昵称创建索引,才能充分受益于此查询。

票数 1
EN

Stack Overflow用户

发布于 2017-03-07 09:05:47

您可以很容易地得到以下结果:

代码语言:javascript
复制
SELECT d1.AGE, 
       CASE WHEN d1.NAME IS NULL
            THEN d1.NIKCNAME ELSE d1.NAME END as [NewName]
FROM DETAILS d1
INNER JOIN DETAILS d2
    ON d1.AGE = d2.AGE 
WHERE d2.NAME <> d1.NICKNAME
票数 0
EN

Stack Overflow用户

发布于 2017-03-07 09:09:32

使用左联接/左外联接代替.不是在..。

SQL的执行顺序

  1. 从…
  2. 在……上面
  3. 外部
  4. 哪里
  5. 按组
  6. 多维数据集
  7. 有
  8. 选择
  9. 分异
  10. 命令由
  11. 顶部
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42644031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档