2010-09-01 12 views
22

मैं सोच रहा था कि प्रदर्शन के संदर्भ में और बहुत से बहुत सारे (> 1.000.000) रिकॉर्ड वाले एक टेबल पर एक MySQL चुनने पर विचार करना, एसक्यूएल "ऑर्डर बाय" के साथ बेहतर सॉर्टिंग परिणाम या क्लासिकल के साथ क्वेरी के बाद परिणाम सॉर्ट करना है प्रोग्रामिंग सॉर्ट एल्गोरिदम ... किसी के पास कोई सुझाव है?phs sort mysql "ऑर्डर बाय" से बेहतर है?

टैंक

+1

ऐसा लगता है कि आपको पता नहीं है कि डेटाबेस क्या है। यह सादा पाठ फ़ाइल जैसे साधारण कंटेनर नहीं है जैसा कि आप शायद सोचते हैं। यह डेटा मैनिपुलेशन सॉफ्टवेयर है। ऑर्डरिंग, फ़िल्टरिंग, एग्रीगेटिंग और बहुत कुछ करने के लिए डिज़ाइन किया गया। जबकि PHP डेटा मैनिपुलेशन सॉफ़्टवेयर नहीं है लेकिन हाइपरटेक्स्ट प्रीप्रोसेसर –

उत्तर

14

आप ऑप्टिमाइज्ड सी में कार्यान्वित तरीकों के साथ एक प्रणाली की तुलना कर रहे हैं, जिसका अर्थ यह है कि आप वास्तव में इस कार्य को करने के लिए, एक व्याख्यात्मक स्क्रिप्टिंग भाषा में लागू करने जा रहे हैं।

असल में, सी में लिखे कुछ भी 100

करने के लिए, PHP में लिखा एक बराबर समारोह की तुलना में तेजी एक बहुत होने जा रहा है 10 का एक पहलू से जैसा कि पहले ही बताया गया है, सब पर यह दूर है कि कोई सवाल ही नहीं है अपने डीबी को सही तरीके से कॉन्फ़िगर करने के लिए और अधिक कुशल बनाने और इसे काम करने दें।

20

mySQL, हाथ नीचे। इसे करने के लिए अनुकूलित किया गया है, और इंडेक्स का उपयोग कर सकते हैं। यह PHP में करने के लिए भयानक होगा (और आप जल्दी से memory_limit तक पहुंचेंगे)।

10

परिकल्पनात्मक मामले में आपको वास्तव में अपने एप्लिकेशन की याद में रिकॉर्ड प्राप्त होते हैं तो mysql अभी भी आपके ऐप के पैंट को हरा देगा क्योंकि यदि आपने अपना डेटाबेस सही कॉन्फ़िगर किया है तो उसे सॉर्ट करना होगा।

मैं 1 एमओओ रिकॉर्ड की एक तालिका में आदेश देना चाहता हूं, तो आप इंडेक्स में प्रदान करेंगे जो आम तौर पर बी-ट्री के रूप में लागू किया जाएगा जहां माइस्क्ल चल सकता है और क्रमबद्ध परिणाम प्राप्त कर सकता है।

10

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

संक्षेप में, यदि डीबी इसे कर सकता है, तो डीबी इसे लगभग हमेशा करना चाहिए।

+2

+1 - इस तरह के डेटा को ट्रांसफर करना डेटाबेस पर ऐसा करने से कहीं अधिक महंगा होगा। –

3

कभी-कभी यदि आप "अस्थायी उपयोग करना; फाइलों का उपयोग करना" से बच सकते हैं, तो यह इसके लायक है, हालांकि मैंने व्यापक परीक्षण नहीं किया है।

1 SIMPLE favorites ref source_id,user2_id source_id 3 const 137 Using index; Using temporary; Using filesort 
1 SIMPLE users eq_ref PRIMARY,updated PRIMARY 3 apm.favorites.target_id 1 Using where 
इसके बजाय नाम से सॉर्ट करने के लिए mysql पूछने का

, माणिक में मैं

results.sort_by {|u| u.name.downcase} 

जिसके परिणामस्वरूप mysql क्वेरी अब है सरल कार्य करें:

1 SIMPLE favorites ref source_id,user2_id source_id 3 const 137 Using index 
1 SIMPLE users eq_ref PRIMARY,updated PRIMARY 3 apm.favorites.target_id 1 Using where 

बेशक आप नहीं चाहते हैं अगर आप कुछ सौ पंक्तियों से अधिक लौट आए तो ऐसा करें।

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