동일한 코드에서 볼 수있는 엄청난 성능 차이를 이해하려고합니다. 또는 최소한 코드가 같다고 생각합니다.MySql : select statment에서 @variable을 사용하면 수백 배 더 길어집니다.
약 1 천만 개의 레코드가있는 테이블이 있습니다. 여기에는 다음과 같이 정의 된 색인이 포함되어 있습니다. USPatentNum char (8)
MySql을 사용하여 변수에 값을 설정하면 218 초가 걸립니다. 문자열 리터럴과 정확히 같은 쿼리는 1/4 초도 걸리지 않습니다. 리터럴 값 으로 영원히 걸리지 만, 제 (USPatentNum = @pn 어디)와 아래 코드
상기 제 1 선택 문 (USPatentNum = '5288812'는) 거의 순간이다
mysql> select @pn := '5288812'; +------------------+ | @pn := '5288812' | +------------------+ | 5288812 | +------------------+ 1 row in set (0.00 sec) mysql> select patentId, USPatentNum, grantDate from patents where USPatentNum = @pn; +----------+-------------+------------+ | patentId | USPatentNum | grantDate | +----------+-------------+------------+ | 306309 | 5288812 | 1994-02-22 | +----------+-------------+------------+ 1 row in set (3 min 38.17 sec) mysql> select @pn; +---------+ | @pn | +---------+ | 5288812 | +---------+ 1 row in set (0.00 sec) mysql> select patentId, USPatentNum, grantDate from patents where USPatentNum = '5288812'; +----------+-------------+------------+ | patentId | USPatentNum | grantDate | +----------+-------------+------------+ | 306309 | 5288812 | 1994-02-22 | +----------+-------------+------------+ 1 row in set (0.21 sec)
두 가지 질문 :
왜 @pn을 사용하는 것이 훨씬 느린 거죠? 성능이 동일하도록 select 문을 변경할 수 있습니까?
예, 원래 문제 설명에 색인이 생성되었다고 나와 있습니다. – fishtoprecords
은 현명하지 않고 내가 물었던 것의 절반에 대답합니다. 자, 다시 데이터 유형? – gbn
또한 원본 진술서에 있습니다. USPatentNum char (8) – fishtoprecords