2013-04-18 2 views
0

두 테이블을 결합하고 싶지만 '?'로 시작하는 이름은 제외하고 싶습니다. (사실 '?'이 포함 된 모든 범죄자는 '?'로 시작합니다.)쿼리에서 문자를 제외하는 가장 빠른 방법

이것은 실제로 느립니다. 보다 나은 쿼리 또는 인덱싱을 통해 속도를 향상시킬 수 있습니까?

내가 상속 한 코드이므로 연결을 사용 중입니다. 나는 concat이 최선의 선택이 아니라고 생각하지만, 나는 그것을받은 것처럼 코드를 보여줄 것이라고 생각했다.

필자의 이해는 색인으로 와일드 카드 검색에 도움이되지 않습니다.

감사합니다. 같은 대한

+4

왜 하나의 인수만으로'CONCAT'을 호출합니까? –

+2

왜 concat ('? %')가 아니라 '? %'와 (과) 비슷합니까? – fthiella

+0

상속 된 코드 - 명확성을 위해 원래 쿼리가 편집되었습니다. –

답변

0

를 사용하여 정규 표현식 :

SELECT NAME, AGE, LOCATION FROM TABLEONE WHERE NAME REGEXP '^([^?])' 
UNION ALL 
SELECT NAME, AGE, LOCATION FROM TABLETWO WHERE NAME REGEXP '^([^?])' 
+0

이 방법이 효과적이지만 인덱스를 사용하거나 더 빨리 처리 할 것이라고 생각하지 않습니다. –

0

이름로 시작할, 당신은 아마 그 플래그에 데이터베이스에 또 다른 필드가하고자하는 모든 항목에 대한 특별한 무언가가 있다면?. 그냥 이름을 사용하는 것만 큼 좋지 않습니다. 느린 속도로이 문제에 빠지게됩니다.

+0

불행히도 사용자 (일반인)가 필드에 '테스트'를 입력합니다. 그것은 약 0.1 %의 시간에 발생합니다. 하지만 3 억 가지 레코드가 있으므로 여전히 몇 가지가 있습니다. –

관련 문제