0
테이블 2에는 17 자리 숫자 (varchar 17)의 일련 번호 범위 (unique)와 테이블 1의 일련 값 (범위와 동일한 형식)이 포함되어있는 MYSQL에 두 개의 테이블이 있습니다 예 :MYSQL - 범위 내의 빠른 검색을위한 결과 사이의 제한
select *
from table1,table2
where table1.serial between table2.start and table2.end
하지만 아래의 사실로 빠르게 실행되도록 최적화하려면 :
table 1:
serial_id seial
1 12345678123456799
table 2:
range id date start end
1 2012-01-01 12345678123456789 12345678123456999
2 2012-01-01 12345678123457000 12345678123457099
3 2012-01-01 12345678123457100 12345678123457199
나는 각 시리얼을 사용할 수 좋았지 간단한 쿼리에 속하는 범위 ID를 찾으려는 일련 번호와 범위는 고유하므로 각 serial은 중 하나의 범위 인 에 속할 수 있습니다. 하나의 범위에 시리얼이 포함되어 있으면 다른 범위를 검색 할 필요가 없습니다. 각 범위의 처음 11 자리가 동일합니다. 예를 들어 한 범위는 12345678120000000에서 12345678129999999까지입니다. 일련 번호와 범위는 날짜순으로 정렬되며 조기 날짜에 범위를 찾을 가능성이 큽니다. 일련 번호는 약 600,00000 레코드이고 범위는 약 100000 레코드입니다.
더 나은 쿼리를위한 아이디어가 있습니까?
이 테이블의 실제 검색어를 표시 할 수 있습니까? 귀하의 쿼리가 6m 레코드를 반환하고 현실 세계에서는 쓸모가 없으므로이 질문을했습니다. 더 나은 답변을 제공 할 것입니다. –
@ Msf-vpt : 내 실제 검색어는 위에 씁니다. 일련 번호가있는 일련의 제품 일괄 처리를 판매했습니다. 내 범위는 판매 된 배치이며, 판매 된 배치에서 사용 된 배치를 검색하려고합니다. 이 쿼리를 통해 사용하지 않은 시리얼을 찾을 수 있고, 판매에서 사용까지 더 빠르며, 더 빠른 판매자와 더 많은 정보를 얻을 수 있습니다. – user3833757
모든 관련 테이블과 EXPLAIN의 결과에 대해 CREATE TABLE 문을 제공하십시오. 그리고 악한'SELECT *'을 사용하지 마십시오. – Strawberry