2011-06-14 4 views
0

범위 (특히 몇 년)로 표시된 매개 변수를 기반으로 대형 테이블에서 행을 가져 오는 쿼리를 디자인하고 있습니다. 3 가지 특정 값 (예 : 고객 번호가 # 001, # 002 및 # 003 인 고객 레코드를 가져옴)을 기반으로 행을 가져 오려는 경우가 있습니다.mysql에서 범위를 쿼리하는 가장 좋은 방법

IN() 간의

()

: 빨리 다른 사람보다 작동 WHERE 문 뒤에 조건에 대한 구문이있을 경우 범위의 질문에 대한

가 궁금하네요 high.range> = data> = low.range

IN() 옵션의 경우, 연도를 low.range부터 high.range까지의 연도 목록으로 변환하는 스크립트를 작성할 수 있습니다. 따라서 2000 년에서 2004 년 사이에는 IN ('2000', '2001', '2002', '2003', '2004')이됩니다. 이것은 MySQL 외부의 추가 프로그래밍 단계 일 것이지만, 그렇게하는 것이 어렵지 않습니다.

나는 클러스터 된 인덱스를 사용하는 것처럼 처리 속도를 높이기 위해 할 수있는 다른 일이 있다는 것을 알고 있지만, WHERE 문 다음에 사용할 SQL 구문과의 차이점이 있는지 확인하려고했다.

+0

나는 그것을 테스트하지는 않았지만, 당신이 필요로하는 것을 정확하게 수행하기 때문에'BETWEEN'은 더 빠르고 (관용적 인) 선택이라는 것을 이미 상상할 것입니다. –

+0

필자가 아는 한, 'between'문법은'a <= b <= c' 버전을 대체하는 방법 일뿐입니다. 데이터베이스 유형에 관계없이 내부적으로 동일하게 작동해야합니다. –

답변

0

에서

(조건 1은, 조건 2는 조건 3)은 단지 (조건 1 또는 조건 2 또는 조건 3)

처럼 작동

나는 날짜의 숫자가 빠르 일 사이에 기대 큰 1 이상 또는

2의 대 (> 1001 1000) 등 (1000 = 998 또는 1000 = 996 또는 등 1000 = 995).

0

편집 : 죄송합니다. 질문을 잘못 해석했을 수도 있습니다.

나는이 경우 betweenin에 더 적합한 기능이라고 믿지만, 나는 확실히 벤치마킹을하고 싶다.


당신이 TIMESTAMP, DATE 또는 DATETIME 컬럼을 사용하는 경우, 당신은 year을 사용할 수

month, weekday 기능도 있습니다
where year(column) > 2000 or year(column) < 2005 

. 단지 high.range> = 데이터> = low.range 같은 작품의 무대 뒤에서

http://dev.mysql.com/doc/refman/5.1/en/datetime.html

관련 문제