본문 바로가기
MySql

MySQL Is there a performance difference between BETWEEN and IN with MySQL or in SQL in general?

by 베이스 공부 2020. 11. 16.
반응형

자동 증분 정수인 기본 키를 기반으로 얻고 싶은 연속 행 집합이 있습니다. 구멍이 없다고 가정하면 다음 사이에 성능이 있습니까?

SELECT * FROM `theTable` WHERE `id` IN (n, ... nk); 

과:

SELECT * FROM `theTable` WHERE `id` BETWEEN n AND nk;

 

해결 방법

 

BETWEEN 은이 경우 IN 보다 뛰어야합니다 (그러나 실행 계획을 측정하고 확인하는 것도 실행 합니다!), 특히 n 은 증가하고 통계는 여전히 정확합니다. 가정 해 봅시다 :

이론적으로 BETWEEN 은 기본 키 인덱스에서 단일 "범위 스캔"(Oracle 말하기)으로 구현 된 다음 최대 n 인덱스 리프 노드를 순회 할 수 있습니다. 복잡성은 O (n + log m)

입니다.

IN 은 일반적으로 기본 키 인덱스에서 n "범위 스캔"의 일련 (루프)으로 구현됩니다. m 이 테이블의 크기 인 경우 복잡성은 항상 O (n * log m) ... 이는 항상 더 나쁩니다. > m 또는 매우 작은 범위 n )

어쨌든 전체 테이블 스캔을 받고 각 행에서 조건자를 평가합니다.

BETWEEN 은 두 개의 술어를 평가해야합니다. 하나는 하한 용이고 다른 하나는 상한 용입니다. 복잡성은 O (m)

입니다.

IN 은 최대 n 개의 술어를 평가해야합니다. 복잡성은 O (m * n) ... 다시 항상 더 나쁘거나 데이터베이스가 IN O (m) 입니다. code> 목록은 술어 목록이 아니라 해시 맵이됩니다.

 

참조 페이지 https://stackoverflow.com/questions/3308280

 

 

반응형

댓글