단순 검색 쿼리가 너무 느린 이유는 무엇입니까?

단순 검색 쿼리가 너무 느린 이유는 무엇입니까?

"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와 거리에 대한 인덱스 두 개를 생성할 수도 있습니다. 그것도 잘 작동할 것입니다.

관련 정보