2017-10-23 1 views
0

잘 최적화되어야하는 테이블 스키마를 만듭니다. 그 이유는 3 ~ 5 백만 개의 레코드가있는 테이블입니다. 여기에 큰 관심사는 검색과 관련이 있습니다.이 경우 유명한 LIKE %% ...는 옵션이 아니며,이를 방지하기 위해 삽입 할 때마다 기본 입력란을 기반으로 3 개의 키워드가 생성됩니다. 뭔가 예 이름 : 다음 열 미리 정의 된 키워드를 사용하여 테이블 스키마 만들기

id | name | visibility | key_1 | key_2 | key_3 

허구 테이블 "도시"그래서이 경우에 우리는 두 단어를해야합니다,의 레코드로 뉴욕의 도시를 입력 할 수 있습니다. 그런 식으로

key_1 = new 
key_2 = york 

, 기록의 수백만 테이블의 검색은 다음과 같이 보일 것이다 :

select name from cities 
    where visibility = 1 
     and(
      key_1 = 'new' or 
      key_1 = 'york' or 
      key_2 = 'new' or 
      key_2 = 'york' 
     ); 

질문은 : 그것은 심지어 전체 텍스트 또는 %% LIKE 와일드 카드보다 더 빠르게 될 것인가? 좋은 습관입니까?

이 기술을 사용하는 대기업을 보았지만 귀하의 의견을 듣고 싶습니다.

미리 감사드립니다. 쿼리에

+0

필드가 아닌 _Columns_입니다. – jarlh

+0

@jarlh 감사합니다. 영어를 잘 말하지 않습니다. – Mystic

답변

1

마이너 수정 : 성능을 원하는 경우

select name from cities 
    where visibility = 1 
     and 'new' in (key1, key2) 
and 'york' in (key1, key2) ; 
+0

고맙습니다.하지만이 방법에 대해 어떻게 생각하니, 검색 성능에 좋은가요? – Mystic

+0

예전 신비주의 ..... –

1

, 당신은 한 도시 당 행과 키 당 하나, CityKeys라는 테이블을 원한다. 키 문제의 순서는 다음 논리로 keynumber 열을 포함 할 수있는 경우

select c.name 
from cities c 
where c.visibility = 1 and 
     exists (select 1 from citykeys ck where ck.cityid = c.cityid and ck.key = 'new') and 
     exists (select 1 from citykeys ck where ck.cityid = c.cityid and ck.key = 'york') ; 

:

그럼 당신은 같이 쿼리를 작성할 수 있습니다.

그러면 citykeys(cityid, key)의 색인을 이용할 수 있습니다.

관련 문제