2009-07-16 2 views
0

테이블의 다른 위치 사이의 거리를 저장하고 싶습니다.조회 테이블 처리를위한 영리한 SQL 전략 찾기

CREATE TABLE `example` (
    `id` INT NOT NULL AUTO_INCREMENT , 
    `from` VARCHAR(8) NOT NULL , 
    `to` VARCHAR(8) NOT NULL , 
    `distance` DECIMAL(6, 2) NOT NULL , 
    PRIMARY KEY (`id`) , 
    INDEX (`from` , `to`) 
) 

두 점 사이의 거리를 측정 할 때 표에 삽입됩니다. 'from'과 'to'사이의 거리를 구하는 것은 매우 쉽습니다. 그러나 'to'와 'from'사이의 거리는 정확히 같습니다. 나는 'to'와 'from'을 전환하기 위해 다른 행을 만들고 싶지 않습니다. 나는 또한 이것을 달성하기 위해이 테이블에 대한 룩업 테이블을 만들 필요가 없다.

거리를 선택하는 SQL은 상당히 많이 호출되므로 효율적 쿼리 여야합니다.

나는 테이블이 너무 장소가 된 varchar 등

누구나 그들이 추천 수있는 전략이 인에 대해 걱정하지 마십시오 단순화?

답변

4

'A'와 'B'위치를 호출하십시오. A < B 인 경우 'from'에서 A를 검색하고 'to'에서 B를 검색하십시오. 그렇지 않으면 'from'에서 B를 검색하고 'to'에서 A를 검색하십시오. 값을 삽입 할 때와 동일한 논리입니다.

그런 식으로 각 조합을 한 번만 저장하면 쿼리가 빠릅니다.

+0

정확히 내가 수행 한 해결책의 종류 –

0

전적으로 다른 것을 제안 할 수 있습니다. 각 점은 같은 점에 상대적인 좌표를 가지므로 두 점을 주면 거리가 계산되고 DB에는 저장되지 않습니다.

이제 맵/그래프의 점인 경우 다른 해결책이 마련되어 있습니다.

+0

그는 위치에 좌표가 있다고 말하지 않았고 그 사이의 거리가 직선이라고 말하지 않았습니다. 위치가 도시이고 거리가 가장 빠른 도로 여행이라면, 확실히 직선이 아닐 것입니다. –

+0

나는 내 대답에 그래프를 언급했다. 어떤 식 으로든 저장하고 싶은 것을 저장하는 가장 좋은 방법은 관계형 DB가 아닙니다. –