"cities" 테이블에서 검색하는 것이 왜 그렇게 느린지 모르겠습니다. 내 쿼리는 도시에서 약 25km 떨어진 곳에 있는 "cities" 테이블을 찾고 있습니다. 이 간단한 쿼리를 사용하면 데이터베이스가 결과를 반환하는 데 거의 20초가 걸립니다.
SELECT city_destination,distance FROM cities WHERE city_start='Wien' AND distance <= 25 ORDER BY distance ASC
테이블 엔진은 InnoDB입니다. 테이블에는 약이 있습니다. 7백만 개의 행:
+--------------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| id_of_start | int(11) | NO | | NULL | |
| id_of_destination | int(11) | NO | | NULL | |
| city_start | text | NO | | NULL | |
| city_destination | text | NO | | NULL | |
| distance | double | NO | | NULL | |
+--------------------+-------------+------+-----+---------+----------------+
데이터베이스나 쿼리를 최적화하는 방법을 조언해 줄 수 있는 사람이 있나요?
답변1
이 쿼리에서는 city_start + 거리에 대한 인덱스를 사용해야 합니다.
CREATE INDEX idx_citie_start_distance ON cities (city_start, distance);
city_start와 거리에 대한 인덱스 두 개를 생성할 수도 있습니다. 그것도 잘 작동할 것입니다.