我正致力于从数据库中选择位置(城市、州)。问题是查询运行有点慢,我不确定如何加快速度。例如:
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 不是必需的;但是,由于它是不必要的,我想知道它是否有任何区别以及我是否应该为了加快查询而费心摇船。)
编辑:已经有关于城市、州和邮政编码的索引;加上它们的组合(城市、邮政编码;单独的州/邮政编码)。
最佳答案
在 (state, city)
上创建一个复合索引并将查询重写为:
SELECT CONCAT_WS(', ', city, state) AS location, AVG(latitude), AVG(longitude)
FROM places
WHERE state='NY'
AND city='New York'
GROUP BY
state, city
请注意,对于这个查询,您可以省略 GROUP BY
子句:
SELECT 'New York, NY' AS location, AVG(latitude), AVG(longitude)
FROM places
WHERE state='NY'
AND city='New York'
但是,这个查询仍然需要它:
SELECT CONCAT_WS(', ', city, state) AS location, AVG(latitude), AVG(longitude)
FROM places
WHERE state='NY'
GROUP BY
state, city
关于sql - 我怎样才能加快这个 SELECT CONCAT/GROUP BY 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1212308/