2009-11-20 4 views
0

저장 프로 시저에서 다음 쿼리를 실행하고 있으며 실행하는 데 30 밀리 초가 걸립니다. 사람이 쿼리를 최적화하기 위해 나를 도울 수 :표에서 간단한 업데이트 최적화

테이블 정의는 다음과 같습니다

Create Table Customer 
(
    CustID int not null auto_increment, 
    CustProdID int, 
    TimeStamp DateTime, 
    primary key(CustID) 
); 

Update Customer 
Set TimeStamp = InputTimeStamp (stored procedure's Input) 
Where CustID = InputCustID (stored procedure's Input) 
and CustProdID = InputCustProdID; (stored procedure's Input); 

또한 차 인덱스 외에이 테이블 custprodID 열 간단한 인덱스가 있습니다.

미리 감사드립니다. 감사합니다. Manasi

+0

귀하의 모든 질문에 대한 대답으로 업데이트 시작 전과 업데이트 완료 후에 디버그 명령문을 저장 프로 시저에 저장했습니다. 앞서 언급했듯이이 열은 인덱스를 가지고 있습니다. –

답변

0

동일한 기능을 유지하면서 여기에서 변경할 수 있다고 확신하지는 않습니다. 매우 기본적인 쿼리입니다.

0

제 생각 엔 시간은 저장 프로 시저에서 쓰이지는 않지만 그것을 호출하는 코드 (네트워크 오버 헤드 등)에 소비 된 것 같습니다.

+0

이것은 mysql 커맨드 라인에서 프로 시저를 호출 할 때입니다. –

+1

앱이 사용할 동일한 코드로 백만번 실행하십시오. 그것은 당신에게 얼마나 오래 걸릴지 추정을위한 좋은 근거를 제공 할 것입니다. –

1

어떻게 30ms를 측정하고 있습니까? 프로 시저를 한 번 실행하면 테스트를 실행하는 오버 헤드로 인해 결과가 달라집니다. 루프에 넣고 1000 번 말한 다음 결과를 1000으로 나눕니다. 그러면 어떻게됩니까?

0

30ms라고 말하면, 그 CPU 시간 또는 전반적인 성능 시간입니까? 얼마나 많은 레코드가 업데이트되는지 알고 있습니까 (예를 들어 적은 수를 추측하고 있지만 확실하지는 않습니다). 또한 테이블에 트리거가있어 눈을 맞추는 것보다 많은 작업이 수행되고 있습니다 ...

동의합니다. 이것은 간단한 쿼리이므로 최적화 할 필요가 없습니다. 두 필드에 클러스터 된 인덱스를 넣을 수도 있지만 응용 프로그램에 적합한 지 여부는 알 수 없습니다.

0

(CustID, CustProdId)에 가장 왼쪽의 접두사 색인을 사용할 수 있습니다.