2011-10-25 2 views
4

나는 매우 착수중인 측면 프로젝트에서 일하고있다. 내 질문에 BOOLEAN 값을 사용하여 추가 데이터 처리가 필요한지 여부를 결정할 때 얻는 효율성이 고려됩니다.부울 (BOOLEAN) 값을 통한 SQL (mySQL) 최적화

예 : 모든 생물을 나열한 표가있는 경우. 자연계에서 관계형이었던 다른 테이블에서는 최대 절전 모드 동안 최대 절전 모드 시간과 칼로리를 매일 표시했습니다.

내부 (생물) 테이블에 "최대 절전 모드"BOOLEAN 값을 설정하는 것이 효율적입니까?

true 인 경우 "hibernation_creature_info_relations"테이블로 이동하여 해당 ID를 가진 크리쳐를 찾아 반환하십시오.

"hibernates"= false 값을 가진 모든 생명체는 SQL이 "hibernation_creature_info_relations"의 큰 테이블을 검색하지 않아도된다는 것을 의미합니다.

또는 ID를 사용할 때 "hibernation_creature_info_relations"테이블을 너무 빨리 검사하면 너무 빠르므로 최대 절전 모드 값이 설정된 경우 기반으로 수행하는 인수를 처리해야하므로 성능에 실제로 큰 영향을 미칩니다 참 또는 거짓으로?

나는 이것이 내가 묻고있는 것을 이해하는 데 도움이되는 충분한 정보 였으면 좋겠다. 내게 알려 주면 더 많은 내용을 포함하거나 더 자세히 설명해 줄 수 있기를 바랍니다.

+0

다른 테이블에서 최대 절전 모드 필드를 복제하지 않아도 많은 이점을 얻을 수 있습니다. 데이터 세트의 크기를 줄임으로써 속도를 향상 시키려면 원래 테이블에 다시 결합해야합니다. –

+0

또한 명령형 언어와 달리 SQL의 실행 순서/최적화를 제어 할 수있는 권한은 거의 없습니다. 이것이 조인 재정렬, 테이블 스캔 사용, 표시 전환, 다른 순서 지정 및 임시 테이블 생성을 포함하여 쿼리 속도를 높이기 위해 '시도'할 수있는 다양한 작업을 수행 할 수있는 옵티 마이저입니다. 또한 실제로 단락 논리와 같은 것은 없습니다. 특히 조인의 컨텍스트에서 그렇습니다 (옵티마이 저는 적합하다고 생각되면 자유롭게 사용할 수 있습니다). –

답변

5

아니요, 그렇게하는 것이 좋지 않습니다.

대신 null 일 수있는 일반 필드를 사용하십시오.

table creatures 
--------------- 
id  name  info_id 

1  dino  null 
2  dog  1 
3  cat  2 

table info 
-------------- 
id  info_text 

1  dogs bark 
2  cats miauw 

지금 당신은 다만 할 수있는 조인이 같은 그것을 할 경우

SELECT c.name, i.info_text 
FROM creature c 
LEFT JOIN info i ON (c.info_id = i.id) 

, SQL이 인덱스를 사용할 수 있습니다.
SQL 데이터베이스는 부울 필드에 인덱스를 만들지 않습니다.
해당 필드의 카디널리티가 너무 낮으며 하위 카디널리티 필드에서 색인을 사용하면 사물을 빠르게하는 대신 사물을 느리게 만듭니다.

관련 항목 : MySQL: low cardinality/selectivity columns = how to index?

+0

고양이 miauw? 나는 항상 그들이 야옹 생각 ... 마음 == 날려 –

+0

@ nathangonzalez 어쩌면 그들은, 누가 알 수 있습니까? –

+0

+1 내 언어로 된 속임수 동물 소리는 +1! –

0

당신이 열을 사용하려면 은 다음 그렇지 않으면 당신은 인덱스에 만들 수 있습니다 @Johan을 따라야 다른 테이블을 검색하는 데에서 SQL을 방지하기 위해 "최대 절전 모드" 열이 "최대 절전 모드"가되면 실행 시간이 향상됩니다. @Johan이 당신에게 말하려고하는 것을 명심하십시오.