ฉันกำลังปรับฐานข้อมูลตั๋วทำงาน Firebird 2.5 ให้เหมาะสม พวกมันถูกเก็บไว้ในตารางที่ประกาศเช่นนี้
CREATE TABLE TICKETS (
TICKET_ID id PRIMARY KEY,
JOB_ID id,
ACTION_ID id,
STATUS str256 DEFAULT 'Pending'
);
โดยทั่วไปฉันต้องการค้นหาตั๋วใบแรกที่ยังไม่ได้ดำเนินการและอยู่ในPending
สถานะ
ลูปการประมวลผลของฉันจะเป็น:
- รับตั๋วที่ 1
Pending
- ทำงานกับ Ticket
- อัปเดตสถานะตั๋ว =>
Complete
- ทำซ้ำ
ไม่มีอะไรแฟนซีเกินไป ถ้าฉันดูฐานข้อมูลในขณะที่การวนรอบนี้ทำงานฉันจะเห็นจำนวนการอ่านดัชนีที่จัดทำขึ้นสำหรับการทำซ้ำแต่ละครั้ง ดูเหมือนว่าประสิทธิภาพจะลดลงอย่างมากไม่ได้ แต่เครื่องที่ฉันทดสอบอยู่นั้นค่อนข้างเร็ว อย่างไรก็ตามฉันได้รับรายงานประสิทธิภาพการทำงานลดลงเมื่อเวลาผ่านไปจากผู้ใช้ของฉัน
ฉันได้ดัชนีมาStatus
แล้ว แต่ก็ยังดูเหมือนว่ามันจะทำการสแกนTicket_Id
คอลัมน์แต่ละรอบซ้ำ ดูเหมือนว่าฉันจะมองอะไรบางอย่าง แต่ฉันไม่แน่ใจ จำนวนการปีนขึ้นของการอ่านดัชนีนั้นเป็นไปตามที่คาดการณ์ไว้หรือไม่
- แก้ไขความคิดเห็น -
ใน Firebird คุณจะ จำกัด การดึงข้อมูลแถวเช่น:
Select First 1
Job_ID, Ticket_Id
From
Tickets
Where
Status = 'Pending'
ดังนั้นเมื่อผมบอกว่า "ครั้งแรก" Status = 'Pending'
ฉันแค่ขอให้มันมาเป็นชุดบันทึกที่
ticket_id
คุณอาจจำเป็นต้องมีดัชนีในวันที่(status, ticket_id)
ticket_id
การดำเนินการที่แย่กว่าการทำดัชนีสถานะ
id
(ชนิดข้อมูล) โดเมนที่คุณกำหนดไว้หรือไม่?