2010-01-21 3 views
4

나는 다음과 같은 SQL 쿼리가 있습니다필드가 다른 필드와 다른 데이터베이스에있는 모든 행을 찾기

사용하는 가장 좋은 인덱스 구조
SELECT * FROM table WHERE field_1 <> field_2 

, 효율적이 쿼리를 유지하기 : field_1에 두 인덱스를 및 field_2 또는 두 필드를 모두 포함하는 단일 색인?

편집 : 데이터베이스는 난이 사용중인 플랫폼에 따라 달라질 수 있습니다 상상,하지만 확실히 하나 개의 인덱스 MS SQL 서버에서 MySQL

+0

사용하는 데이터베이스 엔진 이름을 추가하고 해당 이름에 질문을 태그하십시오. –

답변

1

당신이 더 나은 거대한 테이블을 비정규 별도의 열에 filed1 <> FIELD2의 결과를 저장하고, 해당 행의 모든 ​​삽입/업데이트에 업데이트하는 경우

+0

그건 내가 생각한 옵션이지만, 원자 적으로 비교를 수행하고 별도의 필드에 저장하려면 트리거를 사용해야합니다 (PHP 프레임 워크를 사용하므로 컨트롤이 없습니다). 업데이트 쿼리를 통해), 그리고 가능한 경우 내 데이터베이스에서 트리거를 피하고 싶습니다. –

+0

MVC 프레임 워크를 사용하는 경우 모델에 대해 정의 된 삽입/업데이트 메서드가 있다고 가정하여 계산을 수행하고 결과를 데이터에 추가 할 수 있습니다 –

1

입니다!

+0

데이터베이스 엔진을 지정하는 것을 잊어 버렸습니다 : MySQL –

0

데이터베이스 엔진에 따라 다르지만 일반적으로 쿼리는 테이블 당 하나의 인덱스 만 사용한다고 가정하는 것이 가장 좋습니다. 이는 두 열 모두에서 단일 색인이 가장 좋을 것임을 의미합니다.

그러나 알아낼 수있는 유일한 방법은 더미 데이터로 테이블을 채우고 시도하는 것입니다. 예를 들어, field2 값의 99 %가 서로 동일하고 인덱스가있는 값을 줄일 수있는 경우와 같이 더미 데이터가 분산 방식으로 표시되는지 확인하십시오.

0

3 가지 옵션을 모두 시도해보고 싶지만 각 삽입/업데이트마다 각 색인에 쓰는 것을 기억하십시오. (따라서 두 필드를 모두 인덱싱하면 쓰기 성능에 대한 부정적인 영향을 보상하기 위해 여백을 더 유용하게 사용해야합니다.) 완벽해야 할 필요는 없으며 수용 할 수없는 이미지를 생성하지 않고 시스템 처리량을 처리하기에 충분해야합니다. UI 성능 대기 시간.

내가 가장 먼저 시도해 볼만한 것은 필드에서 가장 다른 값을 가진 단일 인덱스입니다. 즉, Field1에 1000 개의 다른 값이 있고 필드 2에만 20이 있으면 필드 1에 인덱스를 넣습니다.

1

인덱스가 도움이 될 수 없습니다 당신.

databse는 동일한 행의 두 필드를 비교하므로 테이블 스캔을 수행해야합니다.

관련 문제