2012-07-07 2 views

답변

1

당신은 할 수 있습니다 :

select * from table where BINARY column in (select other_column from other_table) 

또는

select * from table where column in (select BINARY other_column from other_table) 

그러나 성능 두 분 모두의 끔찍한 분이세요. mysql이 비교하기 전에 모든 값에 대해 유형 변환을 수행합니다.

다른 의견을 제안 할 때 JOIN으로 쿼리를 다시 작성하는 것이 좋지만 그런데도 형식 변환을 수행하는 값에 가입하는 문제가 있으며 인덱스를 사용할 수 없습니다 . 보다 나은

은이 필드에 민감하거나 정확한 비교를 구분하려면, 다음 열에 BINARY로 테이블의 캐릭터 세트를 변경하거나

는 평소처럼 매뉴얼은 당신을 말할 것이다 _cs와 정렬을 사용하다 이 모든 것 MySQL Character sets and Collations

1

:

반환 1exprIN 목록의 값 중 하나와 동일한 경우, 다른 사람이 0를 반환합니다. 모든 값이 상수이면 expr 유형에 따라 정렬되고 정렬됩니다. 그런 다음 이진 검색을 사용하여 항목 검색이 완료됩니다. 이는 IN 값 목록이 모두 상수로 구성되어 있으면 IN이 매우 빠름을 의미합니다. 그렇지 않으면 유형 변환이 Section 12.2, “Type Conversion in Expression Evaluation”에 설명 된 규칙에 따라 수행되지만 모든 인수에 적용됩니다. 물론

, 귀하의 예를 하나는 항상 함께 IN을 대체 할 수있는 조인 :

SELECT * FROM table JOIN other_table ON table.column = other_table.other_column 
관련 문제