मैं काम टिकटों के एक फायरबर्ड 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'
इसलिए जब मैं "पहले" कहता हूं, तो मैं इसे सीमित रिकॉर्ड सेट के लिए कह रहा हूं Status = 'Pending'
।
ticket_id
, तो आपको प्रोब्लेबी पर एक सूचकांक की आवश्यकता है(status, ticket_id)
ticket_id
वास्तव में स्टेटस इंडेक्स होने की तुलना में खराब प्रदर्शन करता है।
id
(डेटा प्रकार) आपके द्वारा परिभाषित डोमेन है?