मेरे पास एक बड़ी तालिका (टोकन फ़्रिक्वेंसी) है जिसमें लाखों पंक्तियां हैं। TokenFrequency मेज है कि इस तरह संरचित है:एसक्यूएल वैकल्पिक एक एकल टेबल पर एक INNER जॉइन करने के लिए वैकल्पिक
तालिका - TokenFrequency
- आईडी - int, प्राथमिक कुंजी
- स्रोत - पूर्णांक, विदेशी कुंजी
- टोकन - चार
- गिनती - int
मेरा लक्ष्य उन सभी पंक्तियों का चयन करना है जिनमें दो स्रोतों में एक ही टोकन है। उदाहरण के लिए मेरी मेज इस तरह दिख रही है, तो:
आईडी --- स्रोत --- टोकन --- गिनती
1 ------ 1 --------- कुत्ते - ----- 1
2 ------ 2 --------- बिल्ली -------- 2
3 ------ 3 ----- ---- बिल्ली -------- 2
4 ------ 4 --------- सुअर -------- 5
5 ---- - 5 --------- चिड़ियाघर ------- 1
6 ------ 5 --------- बिल्ली -------- 1
7 ------ 5 --------- सुअर -------- 1
मैं एक एसक्यूएल क्वेरी चाहता हूं कि मुझे स्रोत 1, स्रोत 2, और गणना की राशि दें। उदाहरण के लिए:
source1 --- source2 --- टोकन --- गिनती
---- 2 ----------- 3 --------- बिल्ली -------- 4
---- 2 ----------- 5 --------- बिल्ली -------- 3
---- 3 ----------- 5 --------- बिल्ली -------- 3
---- 4 ------- ---- 5 --------- सुअर -------- 6
मैं एक प्रश्न है कि इस तरह दिखता है:
SELECT F.source AS source1, S.source AS source2, F.token,
(F.count + S.count) AS sum
FROM TokenFrequency F
INNER JOIN TokenFrequency S ON F.token = S.token
WHERE F.source <> S.source
इस क्वेरी ठीक काम करता है लेकिन मैं इसे साथ है कि समस्याओं कि कर रहे हैं:
- मैं एक TokenFrequency तालिका पंक्तियों के लाखों लोगों की है कि है और इसलिए इस परिणाम प्राप्त करने के लिए एक तेजी से विकल्प की जरूरत है।
- मेरे पास वर्तमान क्वेरी जो डुप्लिकेट दे रही है। इसके उदाहरण के लिए चयन:
source1 = 2, source2 = 3, टोकन = बिल्ली, गिनती 4 =
source1 = 3, source2 = 2, टोकन = बिल्ली, गिनती 4 =
कौन सा एक समस्या की बहुत अधिक नहीं है लेकिन अगर उनको दूर करने का एक तरीका है और बदले में गति बढ़ाना है तो यह बहुत उपयोगी होगा
मेरे पास जो मुख्य मुद्दा है, वह मेरी वर्तमान क्वेरी के साथ क्वेरी की गति है, इसे पूरा होने में घंटों लगते हैं। एक टेबल पर INNER जॉइन जो मैं मानता हूं वह समस्या है। मुझे यकीन है कि आंतरिक जुड़ने को खत्म करने और टोकन फ़्रिक्वेंसी तालिका के एक उदाहरण का उपयोग करके समान परिणाम प्राप्त करने का एक तरीका होना चाहिए। मैंने जो दूसरी समस्या का उल्लेख किया है वह भी क्वेरी में गति वृद्धि को बढ़ावा दे सकता है।
मुझे इस क्वेरी को पुन: स्थापित करने का एक तरीका चाहिए ताकि एक ही परिणाम तेज, अधिक कुशल तरीके से प्रदान किया जा सके।
धन्यवाद।
क्या आप क्वेरी के EXPLAIN पोस्ट कर सकते हैं (http://dev.mysql.com/doc/refman/5.0/en/explain.html)। इससे लोगों को यह देखने में मदद मिलेगी कि वे आपको अनुकूलित करने में कैसे मदद कर सकते हैं। –
आपको कुछ इंडेक्स जानकारी, कौन से कॉलम इत्यादि देने की आवश्यकता है –
यहां प्रारंभिक रूप से पोस्ट की गई मेरी क्वेरी का विस्तार है। आईडी: 1, select_type: सरल, तालिका: एफ एंड एस, प्रकार: सभी, संभावित_की: पूर्ण, कुंजी: पूर्ण, कुंजी_लेन: पूर्ण, रेफरी: नल, पंक्तियां: 8, अतिरिक्त: कहां उपयोग करना; बफर का उपयोग करके दो पंक्तियां लौटाई गई हैं, केवल दो पंक्तियों का नाम है एफ और एस – cruzja