【问题标题】:Efficiency of query查询效率
【发布时间】:2012-03-16 15:49:31
【问题描述】:

此查询的效率如何。它在子查询中从同一个表中选择两次。

SELECT DISTINCT country, rowCount FROM 
(
    SELECT *, (
        SELECT COUNT(id) FROM tbl WHERE hide != 1 AND country = y.country
    ) AS rowCount FROM tbl y

) AS x
HAVING rowCount >= 1
ORDER BY x.country ASC

我已经在需要的地方为表建立了索引,并且查询在“0.000 秒”内执行(HeidiSQL 说)所以它一定很好,但是有什么可以改进查询结构的吗?

【问题讨论】:

  • 这个查询有什么作用?
  • 它选择不同国家名称的列表,其中具有相同国家代码的字段数量大于或等于1。
  • 这太复杂了(如果我理解正确的话)。

标签: mysql performance subquery


【解决方案1】:

似乎可以将其重写为单个查询:

SELECT country, COUNT(id) rowCount
FROM tbl
WHERE hide <> 1
GROUP BY country
HAVING rowCount >= 1

游乐场:http://sqlfiddle.com/#!2/28978/1

【讨论】:

  • 这似乎好多了!谢谢!
  • @James: :) 是的,sqlfiddle 很棒。如果每个人都在问题中使用它:)
猜你喜欢
  • 2012-11-01
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多