2011-01-04 14 views
5

मुझे एक उपयोगकर्ता तालिका मिली जिसमें 15+ मिलियन रिकॉर्ड हैं और पंजीकरण फ़ंक्शन करते समय मैं यह जांचना चाहता हूं कि उपयोगकर्ता नाम पहले से मौजूद है या नहीं। मैंने उपयोगकर्ता नाम कॉलम के लिए अनुक्रमण किया था और जब मैं क्वेरी को चलाता हूं "select count(uid) from users where username='webdev'",। Hmmm, यह रिक्त स्क्रीन को लोड करने पर जारी रहता है अंत में लटका हुआ है। मैं इसे अपने स्थानीयहोस्ट में PHP 5 & mysql 5 के साथ कर रहा हूं। तो मुझे कुछ तकनीक संभालने का सुझाव दें इस स्थिति।phs के साथ mysql में 15+ मिलियन रिकॉर्ड जोड़ना?

कि MongoDB हमारे स्थानीय मशीन में इस प्रक्रिया से निपटने के लिए अच्छा विकल्प है?

धन्यवाद, Nithish।

+0

मैं वास्तव में अपने त्रुटि समझ में नहीं आता है, लेकिन आप "उपयोगकर्ता नाम" पर एक सूचकांक है अद्वितीय है ताकि आप अपने प्रश्न में 1 की सीमा निर्धारित करना होगा यह हो जाएगा। .. यह सुनिश्चित करेगा कि मदद करें :) –

+1

इस क्वेरी को चलाएं, फिर परिणामों के साथ प्रश्न संपादित करें: 'उन उपयोगकर्ताओं से चयन गिनती (यूआईडी) की व्याख्या करें जहां उपयोगकर्ता नाम =' webdev'' – sberry

+2

संदर्भ के लिए, हमारे पास 40 मिलियन से अधिक उपयोगकर्ता तालिका है पंक्तियां और जब भी पंजीकरण होता है हम लगभग एक ही प्रश्न करते हैं। प्रश्न को एक दूसरे के ठीक से अनुक्रमित, सही ढंग से डिज़ाइन की गई तालिका पर एक दूसरे के अंश लेना चाहिए। – sberry

उत्तर

5

तुम सिर्फ जांच करने के लिए है कि यह मौजूद है या नहीं चाहते हैं, की कोशिश count का उपयोग नहीं कर रहा है। बस एक साधारण select username from users where username='webdev' LIMIT 1 तेज हो सकता है।

ALSO, कॉलम प्रकार को varchar में बदलें, यदि यह पहले से नहीं है। उपयोगकर्ता text प्रकार नहीं है। यह बहुत धीमा है।

+0

नहीं वास्तव में, 'गिनती (*) या गिनती (उपयोगकर्ता नाम)' – ajreal

+1

@ajreal चीजों को धीमा नहीं करती है, लेकिन 'LIMIT 1' चीजों को गति दे सकती है :) – shamittomar

+0

@shamittomar - आप ओपी स्टोर को गैर-अद्वितीय उपयोगकर्ता नाम नहीं मान सकते हैं ... – ajreal

2

यह एक विवादास्पद बिंदु हो सकता है, लेकिन परीक्षण करने और यदि उपयोगकर्ता नाम पहले से मौजूद है, मैं निम्न क्वेरी (shamittomar के प्रश्न पर एक मामूली संशोधन) जारी करेंगे देखने के लिए:,

SELECT DISTINCT `username` FROM `users` WHERE `username` = 'webdev'; 

हो जाएगा ताकि डिफ़ॉल्ट रूप से , "उपयोगकर्ता नाम" कॉलम में "webdev" का एकमात्र उदाहरण लौटाएं; यदि आप अधिक पैरामीटर जोड़ते हैं, हालांकि, यह आपके परिणाम बदल सकता है। एक उदाहरण है, यदि आप

SELECT DISTINCT `user_id`, `username` FROM `users` WHERE `username` = 'webdev'; 

यह "user_id" और "उपयोगकर्ता नाम" के सभी अद्वितीय संयोजनों को वापस कर देगा।

2

एक चीज जो आप कर सकते हैं index to unique से उपयोगकर्ता नाम की अनुक्रमणिका को बदलना है जो खोज को बहुत तेज़ कर देगा और शमीट्टोमर ने कहा कि अंत में limit 1 जोड़ें, भले ही यह केवल तभी मदद करेगा जब मान पहले से मौजूद हो।

+0

ओपी की एक अनूठी अनुक्रमणिका है जिसे ओपी की जरूरत है, एक चयन किसी विशिष्टता की गारंटी नहीं दे सकता है। –

0

अपने उपयोगकर्ता नाम और अधिक तेजी से

select count(uid) from users where username='webdev' limit 1 
संबंधित मुद्दे