2013-08-23 3 views
0

이와 같은 쿼리는 기본적으로 각각의 조건에 대한 사용자 이름을 해독하거나 단 한번만 각 조건에 적용 할 수 있습니까?복호화를 사용하는 다중 Where 절

SELECT * 
FROM TableA 
WHERE (
    CONCAT_WS(
     ' ', 
     AES_DECRYPT(TableA.FirstName, "fnkey"), 
     AES_DECRYPT(TableA.LastName, "lnkey") 
    ) LIKE '%RAY%' 
    OR 
    CONCAT_WS(
     ' ', 
     AES_DECRYPT(TableA.LastName, "lnkey"), 
     AES_DECRYPT(TableA.FirstName, "fnkey") 
    ) LIKE '%RAY%' 
); 
+1

해독 된 이름을 '선택'하는 것이 더 빠를 수도 있습니다. 그런 다음 사용중인 프로그래밍 언어로 결과를 필터링 할 수 있습니까? –

+1

왜 LIKE %% 구문은 항상 인덱스를 망칠 수 있기 때문에 이것을 사용 하시겠습니까? 그래서 완전한 테이블 스캔은 항상 필요합니다. 테이블이 클 경우 이것은 정말로 느려질 것입니다. –

+0

해독하는 것만으로는 완전한 테이블 스캔이 필요하지 않습니까? – Ray

답변

2

함수가 각 행 이상에 대해 한 번 평가되는지 알 수 없습니다. 쿼리 최적화 프로그램에 따라 다릅니다. 당신은 벤치마킹으로 그것을 설정할 수 있습니다.

어쨌든,이 쿼리는 매우 비효율적입니다. 전체 테이블 스캔을 수행하고 각 행에 대해이 함수를 계산합니다. 여기에 색인을 사용할 수 없습니다. 두 개 이상의 행이있는 테이블에이 쿼리를 구현하지 마십시오.