문제

테이블 패킷이 하나 있습니다
패킷에는 2 개의 필드 ID와 총계가 포함되어 있습니다
그들은 모두 큰 길이 20과 기본 키입니다
ID 만 자동 증분입니다
모든 레코드에서 총 = ID
10000 레코드를 받았습니다.

나는 거의 동일한 쿼리 1을 거의 얻었고 매우 긴 로딩 시간이 매우 길고 하나는 거의 즉시 완료됩니다.

매우 긴 로딩 시간 :

set @i = 0; 
SELECT *
FROM packets as p1
WHERE p1.total in ( SELECT p2.total
FROM packets as p2 where ( ( @i := ( @i + 1 ) )

매우 짧은 로딩 시간 :

set @i = 0;
SELECT *
FROM packets as p1
WHERE p1.id in ( SELECT p2.id
FROM packets as p2 where ( ( @i := ( @i + 1 ) )

이것은 ID와 총계의 값이 동일하지만 발생합니다.

도움이 되었습니까?

해결책

그들은 모두 큰 길이 20과 기본 키입니다

한 테이블에 두 개의 기본 키를 가질 수 없습니다.

인덱스가없는 것 같습니다 packets.total

그것을 만들고 도움이되는지 확인하십시오.

CREATE INDEX ix_packets_total ON packets (total)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top