मेरे पास लगभग 246k रिकॉर्ड वाले टेबल हैं। इसमें लगभग 25 कॉलम हैं, सभी एक छोटे ब्लॉब को छोड़कर पूर्णांक हैं।सरल फायरबर्ड क्वेरी बहुत धीमी है
अगर मैं सभी क्षेत्रों
select a.recordid, a.editcount, ect.. from ARTrans a
पर तालिका क्वेरी यह एक दूसरे के नीचे में निष्पादित करता है। लेकिन अगर मैं केवल रिकॉर्ड आईडी
select a.recordID from ARTrans a
निष्पादित करने में 20+ सेकंड लगते हैं। अधिकांश समय नियोजन (प्राकृतिक) खर्च किया जाता है जो कि अजीब लगता है, ज्यादातर मामलों में, मेरे पास रिकॉर्डिड पर एक सूचकांक है।
मेरे पास कचरा एकत्रित किया गया है, अनुक्रमित इंडेक्स, हटाए गए इंडेक्स, रिकॉर्ड आईडी पर केवल एक इंडेक्स जोड़ा गया है और यह अभी भी बहुत धीमा है।
किसी भी मदद की सराहना की जाएगी।
अधिक जानकारी देने के लिए संपादित:
Firebird: 2.5.3.26778
fbclient.dll: 2.5.1.26351
डेटाबेस में और कोई नहीं है, मैं इसे स्थानांतरित कर दिया है स्थानीय।
SELECT a.RECORDID FROM ARTRANS a
योजना (flamerobin से उत्पादन)
Preparing query:
SELECT a.RECORDID
FROM ARTRANS a
Prepare time: 20.008s
Field #01: ARTRANS.RECORDID Alias:RECORDID Type:INTEGER
PLAN (A NATURAL)
Executing...
Done.
13257 fetches, 0 marks, 76 reads, 0 writes.
0 inserts, 0 updates, 0 deletes, 0 index, 6552 seq.
Delta memory: -19204 bytes.
Total execution time: 20.025s
Script execution finished.
012:
यहाँ तालिका डीईएफ़
CREATE TABLE ARTRANS
(
RECORDID Integer NOT NULL,
EDITCOUNT Smallint,
CLASSIFICATION Smallint,
TRANSID Integer,
DATEENTERED Integer,
CLIENTID Integer,
TRANSTYPE Smallint,
BILLED Smallint,
FINALIZEID Smallint,
INVOICEID Integer,
INVOICENUM Integer,
INVOICEDATE Integer,
GROUPID Smallint,
EXPORTED Char(1),
TRANSVALUE Decimal(18,4),
DESCRIPTION Blob sub_type 0,
POSTPERIOD Smallint,
LINKEDTRANSID Integer,
LINKEDINVID Integer,
LINKEDFUNDSID Integer,
INFOONLY Smallint,
NEEDTRANSFER Char(1),
DESTTRANSID Integer,
LSTTKREDIT Integer,
SPELLNGRAMMARCHECKSTATUS Smallint
);
सूचकांक
CREATE UNIQUE INDEX IDX_ARTRANSRecID ON ARTRANS (RECORDID);
एसक्यूएल बयान है
यह SQL विवरण ठीक काम करता है:
Preparing query:
SELECT a.RECORDID, a.EDITCOUNT, a.CLASSIFICATION,
a.TRANSID, a.DATEENTERED, a.CLIENTID, a.TRANSTYPE, a.BILLED, a.FINALIZEID,
a.INVOICEID, a.INVOICENUM, a.INVOICEDATE, a.GROUPID, a.EXPORTED,
a.TRANSVALUE, a.DESCRIPTION, a.POSTPERIOD, a.LINKEDTRANSID, a.LINKEDINVID,
a.LINKEDFUNDSID, a.INFOONLY, a.NEEDTRANSFER, a.DESTTRANSID, a.LSTTKREDIT,
a.SPELLNGRAMMARCHECKSTATUS, a.RDB$DB_KEY
FROM ARTRANS a
Prepare time: 0.013s
Field #01: ARTRANS.RECORDID Alias:RECORDID Type:INTEGER
Field #02: ARTRANS.EDITCOUNT Alias:EDITCOUNT Type:SMALLINT
Field #03: ARTRANS.CLASSIFICATION Alias:CLASSIFICATION Type:SMALLINT
Field #04: ARTRANS.TRANSID Alias:TRANSID Type:INTEGER
Field #05: ARTRANS.DATEENTERED Alias:DATEENTERED Type:INTEGER
Field #06: ARTRANS.CLIENTID Alias:CLIENTID Type:INTEGER
Field #07: ARTRANS.TRANSTYPE Alias:TRANSTYPE Type:SMALLINT
Field #08: ARTRANS.BILLED Alias:BILLED Type:SMALLINT
Field #09: ARTRANS.FINALIZEID Alias:FINALIZEID Type:SMALLINT
Field #10: ARTRANS.INVOICEID Alias:INVOICEID Type:INTEGER
Field #11: ARTRANS.INVOICENUM Alias:INVOICENUM Type:INTEGER
Field #12: ARTRANS.INVOICEDATE Alias:INVOICEDATE Type:INTEGER
Field #13: ARTRANS.GROUPID Alias:GROUPID Type:SMALLINT
Field #14: ARTRANS.EXPORTED Alias:EXPORTED Type:STRING(1)
Field #15: ARTRANS.TRANSVALUE Alias:TRANSVALUE Type:NUMERIC(18,4)
Field #16: ARTRANS.DESCRIPTION Alias:DESCRIPTION Type:BLOB SUB_TYPE 0
Field #17: ARTRANS.POSTPERIOD Alias:POSTPERIOD Type:SMALLINT
Field #18: ARTRANS.LINKEDTRANSID Alias:LINKEDTRANSID Type:INTEGER
Field #19: ARTRANS.LINKEDINVID Alias:LINKEDINVID Type:INTEGER
Field #20: ARTRANS.LINKEDFUNDSID Alias:LINKEDFUNDSID Type:INTEGER
Field #21: ARTRANS.INFOONLY Alias:INFOONLY Type:SMALLINT
Field #22: ARTRANS.NEEDTRANSFER Alias:NEEDTRANSFER Type:STRING(1)
Field #23: ARTRANS.DESTTRANSID Alias:DESTTRANSID Type:INTEGER
Field #24: ARTRANS.LSTTKREDIT Alias:LSTTKREDIT Type:INTEGER
Field #25: ARTRANS.SPELLNGRAMMARCHECKSTATUS Alias:SPELLNGRAMMARCHECKSTATUS Type:SMALLINT
Field #26: ARTRANS.DB_KEY Alias:DB_KEY Type:STRING(8)
PLAN (A NATURAL)
Executing...
Done.
1135 fetches, 0 marks, 7 reads, 0 writes.
0 inserts, 0 updates, 0 deletes, 0 index, 560 seq.
Delta memory: 25852 bytes.
Total execution time: 0.047s
Script execution finished.
इसके अलावा, मैं वहाँ 246,804 रिकॉर्ड कर रहे हैं और यह लगभग एक मिनट ले लिया संख्या प्राप्त करने के लिए कि जोड़ना चाहिए।
Preparing query: SELECT count(*) FROM ARTRANS a
Prepare time: 52.614s
Field #01: .COUNT Alias:COUNT Type:INTEGER
PLAN (A NATURAL)
Executing...
Done.
499643 fetches, 0 marks, 3016 reads, 0 writes.
0 inserts, 0 updates, 0 deletes, 0 index, 246804 seq.
Delta memory: -18576 bytes.
Total execution time: 52.716s
Script execution finished.
अद्यतन
अगर मैं ब्लॉब स्तंभ, प्रदर्शन रिटर्न को हटा दें। अगर मैं इसे सभी मानों में छोड़ देता हूं और निष्पादित करता हूं, तो प्रदर्शन अभी भी तेज़ है। अगर मैं हर रिकॉर्ड पर ब्लॉब फ़ील्ड अपडेट एक धारा 20 बाइट है कि को रोकने के लिए, प्रदर्शन वापस 20+ सेकंड के लिए सरल क्वेरी
select a.RecordID from ARTrans a
मैं भी आगे ले गया और ब्लॉब क्षेत्र को छोड़कर सभी स्तंभों को नष्ट कर दिया और प्रदर्शन करने के लिए चला जाता है रिकॉर्ड आईडी और मैं अभी भी धीमा हो रहा हूँ। ऐसा लगता है कि इससे पहले देखा होगा। बहुत अजीब।
कौन सा संस्करण एफबी? क्या आप हमें सटीक प्रश्न दिखा सकते हैं? (मुझे पूरा यकीन है कि लिखित रूप में आपकी दूसरी क्वेरी एक उपनाम का जिक्र है जो आपने परिभाषित नहीं की है।) सटीक योजनाओं के बारे में कैसे? – pilcrow
अभी जोड़ा गया संस्करण, 2.5 – cjmarques
यदि आप [जादू 'आरडीबी $ डीबी_केईई]] (http://www.ibexpert.net/ibe/index.php?n=Doc.MysteryOfRDBDBKEY) जोड़ते हैं तो प्रदर्शन के साथ क्या होता है (भौतिक रिकॉर्ड स्थिति) धीमी क्वेरी के लिए और तेजी से पूछताछ से इसे हटा दें? – pilcrow