データベースから場所 (都市、州) を選択する作業を行っています。問題は、クエリの実行が少し遅く、高速化する方法がわからないことです。例えば:
SELECT CONCAT_WS(', ', city, state) as location, AVG(latitude), AVG(longitude)
FROM places
WHERE city='New York' AND state='NY'
GROUP BY location
データベースがきれいな連結されたバージョンの場所を返すようにするため、場所に関係なく CONCAT が発生します (代わりにコードでこれを行う理由がない限り)。たとえば、「ニューヨーク、ニューヨーク」などです。実際には、3 番目の列が混在することがあります (郵便番号)。私は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は不要であることに気付きました;しかし、不要なので、それは何か違いがあるのだろうか、私はクエリを高速化するためにボートを揺さぶる必要があります。)
編集: 都市、州、および郵便番号に関するインデックスが既にあります。加えて、それらの組み合わせ (都市、郵便番号、および州/郵便番号のみ)。