mysql (innodb)은 (A) 또는 (B)와 같은 쿼리를 더 빠른 속도로 지원할 수 있습니까?MySQL innodb는 연속 읽기와 tradeoff를 비교한다
는(A) (A)에서 SELECT * FROM t1 WHERE pkey BETWEEN 2000 and 2001 AND x > 300
는, 기본 키 (800 개)의 행의 범위를 선택한다. "x"는 색인화되지 않습니다. 하나의 범위 조회와 길이 200kb의 연속 읽기가 있습니다.
(B) (B)에서 (SELECT * FROM t1 WHERE pkey BETWEEN 2000 and 2001 AND x > 300) UNION ALL (SELECT * FROM t1 WHERE pkey BETWEEN 3000 and 3001 AND x > 300)
는, 기본 키 (200 개)의 행의 범위를 선택한다. "x"는 색인화되지 않습니다. 두 개의 범위 조회와 길이 50kb의 두 연속 읽기가 있습니다.
요약하면 (A)는 디스크 탐색을 2 배지만 연속 읽기는 1/2로 계산합니다. 반대로 (B)는 디스크 탐색의 절반이지만 인접 판독의 2 배입니다.
일반적으로 검색 속도가 느리고 인접 읽기가 빠르다고 가정합니다. 그러나 추가 검색 10MB를 통해 읽는 것이 더 바람직하다고 가정합니다. 대략적으로 트레이드 오프 지점은 어디입니까?
두 쿼리는 논리적으로 동일하지 않습니다. B는 A에 포함되지 않은 3000..3001 범위를 포함합니다. – Martin
데이터가 두 시나리오에서 다르게 정렬되므로 쿼리 결과가 동일합니다. 그것은 더 명백해야했습니다; 나는 그 질문을하는 아주 좋은 일을하지 않았다. 나는 이것이 이론적으로 이것을 풀려고 시도하는 것을 멈추고 두 가지 접근법을 벤치마킹한다고 생각한다. –