2011-09-12 3 views
1

우리 코드는 C로 작성되었으며 DB는 Informix입니다. ESQL 프로그램에서 몇 가지 코드 최적화를 수행하고 다음 쿼리를 찾았습니다.어느 것이 더 빠릅니다 "col =? 또는 col =? or col =?" OR "where in (?,?,?) in"in informix (.ec/esql)?

업데이트 [일차 키 열] = [새 키] WHERE COL =? 또는 COL =? ...

where 절의 열 수가 동적으로 준비됩니다. 우리는 where 절의 준비를 멈추고 업데이트를하고, 다시 돌아와 나머지를 준비하기 위해 상위 카운트 검사를합니다. UPPER_MARK가

"30"인 경우 (> = UPPER_MARK가 where_parameter_count)
__
을 실행 update__ __ clean_and_continue;/*

UPDATE [TABLE] SET [PRIMARY KEY의 COLUMN] = [NEW KEY] COL IN IN ... */__

우리는 어디를 교체 할 생각 .. 또는 다시 준비 시작 (?,? ...)

"where or"보다 빠를까요?

+1

시도했을 때 무엇을 발견 했습니까? 어느 쪽이든 빨라질 수도 있고 아무런 효과가 없을 수도 있습니다. –

+0

샘플 데이터 세트 (1 백만 레코드 이상 및 30 OR 절 포함)에서 테스트 할 때 차이는 없습니다. –

+1

놀랄 일이 아닙니다. 버전 변경과 같이 데이터베이스 서버를 크게 변경하면 다른 버전이 될 수 있습니다. 또한 코드를 한 방향으로 최적화하면 큰 변화는 다른 방법이 더 빠르다는 것을 의미 할 수도 있습니다. –

답변

3

둘 중 하나의 구문은 쿼리 최적화 도구와 관련하여 동일한 문제를 해결합니다. 차이는 없습니다.

인 - 목록 접근 방식의 유일한 장점은

x IN (a, b) AND y = z 

x = a OR x = b AND y = z 

가되지 같은 일 입니다 즉, 추가 조건을 추가하는 로직을 변경하지 것입니다.

+0

하지만 그 차이는 괄호 안에 OR 용어를 넣으면 해결됩니다. –

+0

물론 그렇습니다. 그러나 우리가 동적으로 생성 된 코드에 관해 이야기 할 때, 나는 그것을 만드는 것이 유용한 구분이라고 생각합니다. – RET

+0

제안 해 주셔서 감사합니다. 실제 코드는 "OR"일뿐입니다. 예, 위의 예를 이해합니다. 샘플 데이터에 대한 테스트에서도 큰 차이가 없었습니다. 팀 구성원 중 하나는 "AND"와 "OR"은 인덱스의 비트 연산이며 더 빠를 것으로 예상했습니다. 너희들은 그것에 대해 어떤 생각을 가지고 있니? –

관련 문제