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

在MySQL中,选择DISTINCT或GROUP BY更快?

许自强
2023-03-14
问题内容

如果我有桌子

CREATE TABLE users (
  id int(10) unsigned NOT NULL auto_increment,
  name varchar(255) NOT NULL,
  profession varchar(255) NOT NULL,
  employer varchar(255) NOT NULL,
  PRIMARY KEY  (id)
)

并且我想获取profession字段的所有唯一值,这会更快(或建议使用):

SELECT DISTINCT u.profession FROM users u

要么

SELECT u.profession FROM users u GROUP BY u.profession


问题答案:

它们本质上是彼此等效的(实际上这就是某些数据库DISTINCT在后台实现的方式)。

如果其中之一更快,那就快了DISTINCT。这是因为,尽管两者相同,但是查询优化器将不得不抓住一个事实,即您GROUP BY没有利用任何组成员,而只是利用了他们的键。DISTINCT明确说明这一点,因此您可以使用稍微笨拙的优化程序。

如有疑问,请测试!



 类似资料:
  • 问题内容: 如果我有表 并且我想获取所有唯一值的字段,这会更快(或建议): 或者 ? 问题答案: 它们本质上是彼此等效的(实际上,这就是某些数据库在后台实现的方式)。 如果其中之一更快,那就快了。这是因为,尽管两者相同,但查询优化器将不得不抓住一个事实,即您没有利用任何组成员,而只是利用了他们的键。明确说明这一点,因此您可以使用稍微笨拙的优化程序。 如有疑问,请进行测试!

  • 问题内容: 我想在数据库中选择不同的值。让我来看一个简单的例子。 表: 是的,假设我的SQL是。这些是我的结果: 但是,问题在于/ 重复的顺序不同。我不想选择这些,我希望这两列中都有不同的值,请帮忙! 问题答案: 非常邪恶和邪恶:

  • 问题内容: 我很好奇,是否有任何一种方法可以在Django中进行查询,而该查询并非位于下方。我正在尝试执行。 具体来说,我有一个看起来像这样的模型: 其中是内的排名。我希望能够遍历所有类别,对该类别中的每个等级进行一些操作。 我想先获取系统中所有类别的列表,然后查询该类别中的所有产品,然后重复进行直到处理完每个类别。 我宁愿避免使用原始SQL,但是如果我必须去那里,那很好。尽管我以前从未在Djan

  • 问题内容: 我需要从合并了2列的表中检索所有行。因此,我希望所有在同一天以相同价格进行的销售都没有其他任何销售。基于日期和价格的唯一销售将更新为活动状态。 所以我在想: 但是我的大脑比这更痛。 问题答案: 是 大致 等效于: 习惯GROUP BY语法是一个好主意,因为它更强大。 对于您的查询,我会这样做:

  • 问题内容: 有没有简单的方法来选择更新的行? 我试图每次读取行时都存储时间戳,以便能够删除长时间未读取的数据。 首先,我首先尝试执行查询,甚至发现有点慢但是简单的解决方案,例如 但我仍然想找到一种正常的方法来做到这一点。 我还认为先更新时间然后选择更新的行应该容易得多,但是即使如此,我也没有找到任何东西 问题答案: 声明该列,如下所示: 然后,每当更新一行时,该列就会自动更新。 更新: 我认为没有

  • 问题内容: 我是MSSQL用户,现在将数据库转换为MySQL。我在MySQL中编写以下查询: 我得到以下错误 如何用MySQL正确编写这样的查询? 问题答案: 使用CREATE TABLE SELECT语法。 http://dev.mysql.com/doc/refman/5.0/en/create-table- select.html