Firebird 2.5 작업 티켓 데이터베이스를 최적화하고 있습니다. 그들은 다음과 같이 선언 된 테이블에 저장됩니다.
CREATE TABLE TICKETS (
TICKET_ID id PRIMARY KEY,
JOB_ID id,
ACTION_ID id,
STATUS str256 DEFAULT 'Pending'
);
일반적으로 처리되지 않고 Pending
상태 가있는 첫 번째 티켓을 찾고 싶습니다 .
내 처리 루프는 다음과 같습니다.
- 첫 번째 티켓 검색
Pending
- 티켓으로 작업하십시오.
- 티켓 상태 업데이트 =>
Complete
- 반복.
너무 멋진 것은 없습니다. 이 루프가 실행되는 동안 데이터베이스를보고 있으면 각 반복마다 인덱스 된 읽기 수가 증가하는 것을 볼 수 있습니다. 내가 말할 수있는 성능은 크게 저하되지는 않지만 테스트중인 컴퓨터는 매우 빠릅니다. 그러나 일부 사용자로부터 시간이 지남에 따라 성능이 저하되었다는보고를 받았습니다.
에 대한 색인이 Status
있지만 여전히 Ticket_Id
각 반복마다 열을 스캔하는 것처럼 보입니다 . 내가 뭔가를 간과하고있는 것 같지만 확실하지 않습니다. 이와 같은 수치의 색인 된 읽기 수가 증가합니까, 아니면 색인이 어떤 방식으로 잘못 작동합니까?
-의견 편집-
Firebird에서는 다음과 같이 행 검색을 제한합니다.
Select First 1
Job_ID, Ticket_Id
From
Tickets
Where
Status = 'Pending'
"first"라고 말하면 where라는 제한된 레코드 세트를 요구합니다 Status = 'Pending'
.
ticket_id
, 당신은 probbaly 온 인덱스 필요(status, ticket_id)
ticket_id
상태를 색인화하는 것보다 실제로 성능이 저하 되도록 색인을 수정했습니다 .
id
(데이터 유형)를 사용하면 정의 된 도메인?