2009-08-12 2 views
0

SQL을 사용하여 비트 필터를 구현하고 있는데 다음 최적화가 이 항상 유효한 모든 경우인지 확인하고 싶습니다.이를 증명하는 방법을 모르겠습니다. 목표는 비교할 행 수를 제한하는 것입니다.SQL에서 비트 필터링 최적화

표준 필터 의사-SQL :

IF (A & B = A) // SHOW VALUE 

문제는이를 추가하기 위해 노력할 것입니까? :

IF (A = B) OR (A & B = A) WHERE (B >= A) // SHOW VALUE 

나에게는 B가 항상 A 이상이어야합니다. - 이것이 사실이 아닌 경우입니까?

나는 위의 코드는 여전히 최적이 아닌 실현, 난 그냥이 갈 수있는 실행 가능한 방향인지 알고 싶어요.

누군가가 나에게 도움이되는 몇 가지 놀라운 수학이 있습니까? 만큼

답변

1

는 부호의 int 다루고있는로 (여부를 MySQL의에서 열 유형으로, 또는 다른 DBS의 contraint로),이 사실이다 :

(A & B == A) implies (B >= A) *not* (A >= B) 

그것의 수학이 있다는 것입니다 B 모든 비트가 A 세트에 있어야하며 가능하면 더 많아야합니다. ! B가> = A)이 (A & B를 의미하는 것은 아니다 (== : A로부터 하나의 비트가 B로 설정되지 않은 경우, 다음 & B = A.는

(그 반대가 항상 true가 아닙니다 A). 바로이 음수로 얻을, 당신은 상황에 실행할 수있는 간단한 반례 5> 3 만 3 & 5 = 1) 또한

로서 어디 & B = A,하지만 B < A.

한 가지 더 : (A & B = A)는 이렇게

말하는 경우 여기서 (A = B)를 포함
IF (A = B) OR (A & B = A) ... 

은 중복됩니다. SQL 엔진과의 속도 차이를 볼 수 없다면 (A = B)를 제거하십시오.

+0

실독증 검사에 감사드립니다. 좋은 수학을 반영하기 위해 질문을 편집했습니다. – willoller