다음 질문에 대한 간결한 답변을 찾으려고 노력했지만 많은 것을 읽었지 만 여전히 확실하지 않습니다. 시나리오가 매우 다를 수 있기 때문에 단순한 대답이 없을 수도 있습니다.mysql 인덱싱 성능
이1) 나는 모든 레코드 중 하나를 0 또는 1 TINYINT 열 수 있습니다 인덱스해야 여기서
그러나 여기이 질문입니까? postActive 열이 0 또는 1로 모든 레코드가
예 검색어 :
SELECT postId, postName, postTitle
FROM postTable
WHERE postDate > Now()
AND postActive = 1
2) 해야하는 그 모든 기록이 대체 int 값이 기록을 제외하고 0을 가지고있는 int 열입니다 인덱스 테이블에서 유일합니까? 이 예
는 열 orderProcessingId은 (제로 이외) 테이블 100 % 고유 될 것, 및 기록의 대다수는 orderProcessingId 0을 갖는다.
SELECT orderId, orderInformation, orderData, orderStuff
FROM orderTable
WHERE orderProcessingId = 38457237
이 두 테이블에는 수십만 개의 레코드가 있습니다.
나는 색인 생성이 성능을 향상시키기 위해 상대적으로 분산 된 빈도 값에 의존하기 때문에 문제가되는 것 같아요. 그러나 예제 1에서는 두 값 모두 극도로 높은 값을 가지며 예제 2에서는 하나의 값 (0)의 매우 높은 빈도와 예외의 반복 빈도가 없습니다.
하지만 내 생각은 모두 추측에 기반을두고 있습니다. 뭐라 구요?
감사 CBroe을 . 첫 번째 예에서 대부분의 레코드는 1입니다. 그러나 700k 1과 400k 0과 비슷합니다. 나는 항상 1에 관심이 있습니다. 예를 들어 2, 더 나은 성능을 위해 Null을 허용하고 고유 인덱스를 사용해야한다고 말하고 있습니까? (지금은 0과 일반 인덱스를 사용하고 있습니다) – userlite
700k 1과 400k 0의 경우 인덱스에 따라 속도가 느려질 수도 있습니다. 1 % 1 %, 99 % 0 %이면 MySQL은 대부분의 경우 올바른 작업을 수행합니다 (1을 선택했을 때만 인덱스 사용). – Vatev
글쎄, 이런 질문에 대한 거의 모든 대답에서 _ "의존한다"가있다. 확실하게 지금은 묻는 사람은 실제로 어떤 효과가 있는지 알아보기 위해'EXPLAIN'을 시도하고 측정하고 사용해야합니다. – CBroe