当前位置: 首页 > 面试题库 >

为什么可以在使用GROUP BY时不使用DISTINCT?

詹正浩
2023-03-14
问题内容

根据MySQL性能Wiki的提示:

拥有或可以使用GROUP BY时,请勿使用DISTINCT。

有人可以发布可以使用GROUP BY代替DISTINCT的查询示例吗?


问题答案:

如果您知道结果中的两列始终直接相关,那么这样做会比较慢:

SELECT DISTINCT CustomerId, CustomerName FROM (...)

比这个:

SELECT CustomerId, CustomerName FROM (...) GROUP BY CustomerId

因为在第二种情况下,它只需要比较ID,但是在第一种情况下,它必须比较两个字段。这是MySQL特有的技巧。它不能与其他数据库一起使用。



 类似资料:
  • 已弃用。这种方法本质上是不安全的。使用thread.Stop停止线程会导致它解锁它锁定的所有监视器(作为未检查的ThreadDeath异常向堆栈上传播的自然结果)。如果以前由这些监视器保护的任何对象处于不一致的状态,则损坏的对象将对其他线程可见,从而可能导致任意行为。stop的许多用法应该被简单修改某个变量以指示目标线程应该停止运行的代码所取代。目标线程应该定期检查这个变量,如果变量指示它要停止运

  • 问题内容: 抱歉,如果我有点模棱两可,但是我试图了解使用Node.js而不是其他服务器端语言的真正优势。 我是JavaScript爱好者,所以我可能会玩Node.js,但我想知道是否应该在项目中使用它。 问题答案: 在V8上发生了异步非阻塞I / O 构建。 因此,我们拥有了Google JavaScript解释器V8的所有性能提升。由于JavaScript性能竞赛尚未结束,您可以期望Google

  • 问题内容: 我从jls找到了报价: 相等运算符可用于比较两个可转换(第5.1.8节)为数字类型的操作数,或两个boolean或Boolean类型的操作数,或 两个分别为引用类型或null类型的操作数 。所有其他情况都会导致编译时错误。 但是这段代码 每个操作数都是参考! 说这是不兼容的类型。 jls在哪里说这些类型应该兼容? 问题答案: 在15.21.3节(参考相等运算符==和!=)中: 如果无法

  • 我找到了JLS引文: 表示它是不兼容的类型。 在jls中哪些地方说这些类型应该兼容?