2012-09-20 6 views
1

나는 플랫폼이 사용을 참조하십시오여러 개의 ID를 varchar로 저장하고 FIND_IN_SET을 사용해야하나요?

SELECT * FROM properties, categories, property_categories 
WHERE 1 
    AND categories.name = "Some category name here" # match this category name 
    AND categories.id = property_categories.id_category # match category 
    AND properties.id = property_categories.id_property # and match property 

하지만 최근 응용 프로그램에서 본과 카테고리별로

- properties table - 
id | name | ID_CATEGORY (INT) 

- categories table - 
id | name 

- property_categories - 
id_category | id_property 

그리고 검색 속성을이 (2 개 테이블 대신 3) :

- properties table - 
id | name | ID_CATEGORY (VARCHAR(255)) 

- categories table - 
id | name 

다음 쿼리를 사용하여 범주별로 속성을 검색하는 중 :

SELECT * FROM properties, categories 
WHERE 1 
    AND categories.name = "Some category name here" # match this category name 
    AND FIND_IN_SET(categories.id, properties.ID_CATEGORY) 

성능상의 이점이 있습니까? 두 번째 방법을 사용하여 첫 번째 방법을 사용해야합니까? 이것을 그대로두면 괜찮습니까?

가끔씩 (ID_TYPE, ID_STATUS 등을 포함하여) 여러 필드가 결합되어 있으며 필터를 위해 모든 데이터를 함께 결합하는 큰 JOIN이 있습니다.

답변

2

FIND_IN_SET은 쉼표로 구분 된 문자열입니다 (예 :

SELECT FIND_IN_SET('b','a,b,c,d'); 

값을 많이 저장하는 것은 어리석은 방법입니다. 예를 들어 색인을 사용하여 'b'를 찾을 수 없습니다.

여러 행을 사용하십시오.

관련 문제