【发布时间】:2009-07-31 12:35:20
【问题描述】:
我正在从数据库中选择位置(城市、州)。问题是查询运行有点慢,我不知道如何加快速度。例如:
SELECT CONCAT_WS(', ', city, state) as location, AVG(latitude), AVG(longitude)
FROM places
WHERE city='New York' AND state='NY'
GROUP BY location
无论如何,该位置都会有一个 CONCAT,因为我希望数据库返回该位置的一个漂亮的串联版本(除非有理由在代码中这样做)。例如,“纽约,纽约”。在现实中,有时会添加第三列(邮政编码)。我在 MySQL 上运行。
优化此查询的最佳方法是什么?
另外,作为次要问题,添加“DISTINCT”会以任何方式减慢查询速度吗?例如:
SELECT DISTINCT CONCAT_WS(', ', city, state) as location, AVG(latitude), AVG(longitude)
FROM places
WHERE city='New York' AND state='NY'
GROUP BY location
(我现在正在这样做,但是在提出这个问题的过程中,我意识到由于 GROUP BY 子句,DISTINCT 是不必要的;但是,由于它是不必要的,我想知道它是否有任何区别如果我为了加快查询速度而费心摇摆不定。)
编辑:已经有关于城市、州和邮政编码的索引;加上其中的组合(城市、邮政编码;和州/邮政编码单独)。
【问题讨论】:
-
在查询前使用 EXPLAIN,它将帮助您了解主要的减速点是什么
标签: sql mysql query-optimization