2010-05-16 18 views
8

MySQL ver 5.1.26MySQL: द्वारा आदेश और सीमा गलत परिणाम

मैं है कि जहां, आदेश से और सीमा खंड-चुने साथ गलत परिणाम हो रही है देता है। यह केवल एक समस्या है जब आईडी कॉलम का उपयोग करके आदेश।

मैं मैनुअल पढ़ने से के लिए LIMIT Optimization

मेरा अनुमान है MySQL मैनुअल देखा प्राथमिक कुंजी पर सूचकांक, आईडी के साथ कुछ समस्या है है। लेकिन मुझे नहीं पता कि मुझे यहां से कहाँ जाना चाहिए ...

प्रश्न: समस्या को हल करने के लिए मुझे क्या करना चाहिए?

Works correctly: 
mysql> SELECT id, created_at FROM billing_invoices 
     WHERE (billing_invoices.account_id = 5) ORDER BY id DESC ; 
+------+---------------------+ 
| id | created_at   | 
+------+---------------------+ 
| 1336 | 2010-05-14 08:05:25 | 
| 1334 | 2010-05-06 08:05:25 | 
| 1331 | 2010-05-05 23:18:11 | 
+------+---------------------+ 
3 rows in set (0.00 sec) 

WRONG result when limit added! Should be the first row, id - 1336 
mysql> SELECT id, created_at FROM billing_invoices 
     WHERE (billing_invoices.account_id = 5) ORDER BY id DESC limit 1; 
+------+---------------------+ 
| id | created_at   | 
+------+---------------------+ 
| 1331 | 2010-05-05 23:18:11 | 
+------+---------------------+ 
1 row in set (0.00 sec) 

Works correctly: 
mysql> SELECT id, created_at FROM billing_invoices 
     WHERE (billing_invoices.account_id = 5) ORDER BY created_at DESC ; 
+------+---------------------+ 
| id | created_at   | 
+------+---------------------+ 
| 1336 | 2010-05-14 08:05:25 | 
| 1334 | 2010-05-06 08:05:25 | 
| 1331 | 2010-05-05 23:18:11 | 
+------+---------------------+ 
3 rows in set (0.01 sec) 

Works correctly with limit: 
mysql> SELECT id, created_at FROM billing_invoices 
     WHERE (billing_invoices.account_id = 5) ORDER BY created_at DESC limit 1; 
+------+---------------------+ 
| id | created_at   | 
+------+---------------------+ 
| 1336 | 2010-05-14 08:05:25 | 
+------+---------------------+ 
1 row in set (0.01 sec) 

Additional info: 
explain SELECT id, created_at FROM billing_invoices WHERE (billing_invoices.account_id = 5) ORDER BY id DESC limit 1; 
+----+-------------+------------------+-------+--------------------------------------+--------------------------------------+---------+------+------+-------------+ 
| id | select_type | table   | type | possible_keys      | key         | key_len | ref | rows | Extra  | 
+----+-------------+------------------+-------+--------------------------------------+--------------------------------------+---------+------+------+-------------+ 
| 1 | SIMPLE  | billing_invoices | range | index_billing_invoices_on_account_id | index_billing_invoices_on_account_id | 4  | NULL | 3 | Using where | 
+----+-------------+------------------+-------+--------------------------------------+--------------------------------------+---------+------+------+-------------+ 

जोड़ा शो बनाने टेबल billing_invoices परिणाम:

Table -- billing_invoices 
Create Table -- 
CREATE TABLE `billing_invoices` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `account_id` int(11) NOT NULL, 
    `invoice_date` date NOT NULL, 
    `prior_invoice_id` int(11) DEFAULT NULL, 
    `closing_balance` decimal(8,2) NOT NULL, 
    `note` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `monthly_invoice` tinyint(1) NOT NULL, 
    `created_at` datetime DEFAULT NULL, 
    `updated_at` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `index_billing_invoices_on_account_id` (`account_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=1337 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 

जोड़ा अधिक:

मैं अब है कि मेरे विकास मशीन पर देखते हैं, सब कुछ सही ढंग से काम कर रहा है। यही कारण है कि मशीन VERSION संस्करण() की 5.1.26-rc-लॉग इन करें

मेरी उत्पादन मशीन, जहां समस्या है पर है, मुझे लगता है कि संस्करण() रिटर्न 5.1.26-rc-percona-लॉग इन करें

तो इस बिंदु पर, मुझे लगता है कि समस्या पेकोना सॉफ्टवेयर के साथ है?

जोड़ा अधिक:

इस बिंदु पर, मैं इसे Percona InnoDB चालक में एक बग पर विचार करने के लिए जा रहा हूँ। मैंने question to their forum रखा है। तत्काल काम के रूप में, मैं create_at द्वारा ऑर्डर करने जा रहा हूं। मैं अपने सिस्टम पर डीबी को अपग्रेड करने की जांच भी करूंगा और देख सकता हूं कि इससे मदद मिलती है या नहीं।

मेरी मदद के लिए रब्बोट और एमडीएमए का धन्यवाद। मैं इस मदद की भी सराहना करता हूं कि मैं कुछ मूर्खतापूर्ण नहीं कर रहा हूं, यह वास्तव में एक समस्या है।

+4

के परिणाम शामिल करें आपके प्रश्न में निम्नलिखित प्रश्न: 'तालिका बिलिंग_इनवोइस बनाएं; '। – Asaph

+0

बहुत अजीब। मैंने अपने mysql सर्वर पर एक समान क्वेरी का परीक्षण किया और यह केवल तब मिलता है जब मैं प्राथमिक_आईडी डीईएससी सीमा 1 द्वारा ऑर्डर का उपयोग करता हूं ... मेरी प्राथमिक आईडी एक स्वत: जेनरेटेड int है ... आपके सर्वर पर एक बग की तरह लगता है ... –

उत्तर

2

यह बग हो सकता है जिसे आपके अपडेट किए गए संस्करण के लिए कभी हल नहीं किया गया था? http://bugs.mysql.com/bug.php?id=31001

मैं स्थानीय रूप से 5.1.42 चला रहा हूं। मैंने उपरोक्त से अपने प्रश्नों की प्रतिलिपि बनाई और चिपकाया और सभी सही परिणाम प्राप्त कर रहे हैं .. चाहे यह उपरोक्त वर्णित बग हो या नहीं, यह एक बग की तरह लगता है, और ऐसा लगता है कि यह आपके हालिया रिलीज में हाल ही में रिलीज़ हो गया है ..

+0

मुझे विश्वास है कि ऑर्डरिंग में परिवर्तन जानबूझकर है - चूंकि आईडी और create_at समकक्ष ऑर्डरिंग का प्रतिनिधित्व करते हैं, फिर इन दोनों के बीच ORDEY BE कॉलम को बदलना परिणाम को प्रभावित नहीं करेगा (जब तक कि कुछ विशेष व्यवहार आईडी कॉलम न हो।) – mdma

+0

@ रब्बॉट मुझे पता है कि मैं हूं आईडी में ऑर्डर करके, किसी अन्य में create_at - यह मेरा बिंदु है, आईडी ऑर्डर के लिए सीमा 1 परिणाम गलत है, क्योंकि create_at सही है ... –

+0

और जब आप मेरे सुझाव का उपयोग करते हैं तो क्या होता है, केवल डेटापॉइंट के लिए यह निर्धारित करने में मदद करने के लिए यह एक कॉलम प्रकार/सूचकांक मुद्दा .. – Rabbott

3

असाधारण लगता है, शायद एक बग? एक वर्कअराउंट के रूप में आप चयन को स्पष्ट कर सकते हैं - MAX (आईडी) का चयन करने के लिए एक सबक्वायरी का उपयोग करें और उस पर फ़िल्टर करें जहां WHERE क्लॉज में है। जैसे

SELECT id, created_at FROM billing_invoices 
    WHERE id IN (SELECT MAX(id) FROM billing_invoices WHERE account_id=5) 
+0

बस की कोशिश की यह और आपकी क्वेरी, काम आईडी 1336. दे रही है लेकिन क्वेरी रेल द्वारा बनाई गई है, इसलिए मैं वास्तव में मूल समस्या पर प्राप्त करने की आवश्यकता डीबी के साथ। –

+0

अन्य पोस्टर्स की तरह ध्यान दिया गया है, यह एक बग की तरह लगता है। जैसा कि आप एक पुराने पुराने संस्करण का उपयोग कर रहे हैं, इसलिए मैं कुछ और करने की कोशिश करने से पहले अपग्रेड करूंगा। – mdma

1

यहाँ से,

Bug Details

ऐसा लगता है यह 5.1 में तय हुई थी।28:

[22 जुला 2008 20:34] बग्स सिस्टम

5.1.28

में धकेल दिया हालांकि, मैं अपने संस्करण में एक ही समस्या देख रहा हूँ: 5.1.41-3ubuntu12.8

संबंधित मुद्दे