如何优化mysql Distinct?

zac*_*987 5 mysql sql

Tbl_responses

  • ID
  • 回复
  • 消息标识符
  • 用户名

有 5,000 条记录。“zac1987”发布了 800 条回复。msgid“zac1987”发布的800条回复中有30处不同。

SELECT DISTINCT msgid 
  FROM Tbl_responses 
 WHERE username = 'zac1987';
Run Code Online (Sandbox Code Playgroud)

目前,解释 SQL 显示有 800 行受到影响。如何优化查询以便只影响30行?我认为必须有一个解决方案来避免循环/过滤 800 条记录...就像我的博客上显示的用 JOIN 子句问题替换 WHERE 子句... ye5.blogspot.com/2011/07/optimize-faster- mysql-query-speed.html我正在寻找一些专家来提出一个解决方案,以避免循环 800 条记录。

我的另一个问题 - 为什么这个页面http://forge.mysql.com/wiki/Top10SQLPerformanceTips说“当你有或可以使用 GROUP BY 时不要使用 DISTINCT”,因为它会减慢查询速度?但我测试过,结果并没有变慢,为什么呢?

Tud*_*tin 2

正如您所说,尝试重写查询以使用该GROUP BY子句:

SELECT msgid 
  FROM Tbl_responses 
 WHERE username = 'zac1987' GROUP BY msgid;
Run Code Online (Sandbox Code Playgroud)

并查看性能差异