गिनती करने के लिए क्वेरी अनुकूलन करने के लिए:MySQL - कैसे बस का सबसे अच्छा तरीका निम्नलिखित परिणाम प्राप्त करने के लिए पर कुछ राय के बाद वोट
मैं (प्रत्येक वोट मेरी MySQL डेटाबेस उत्पादों जो उपयोगकर्ताओं द्वारा मतदान किया जा सकता है में संग्रहीत करना चाहते हैं +1 लायक है)। मैं यह भी देखने में सक्षम होना चाहता हूं कि कुल उपयोगकर्ता ने कितनी बार मतदान किया है।
मेरी सरल मन के लिए, निम्न तालिका संरचना आदर्श होगा:
table: product table: user table: user_product_vote
+----+-------------+ +----+-------------+ +----+------------+---------+
| id | product | | id | username | | id | product_id | user_id |
+----+-------------+ +----+-------------+ +----+------------+---------+
| 1 | bananas | | 1 | matthew | | 1 | 1 | 2 |
| 2 | apples | | 2 | mark | | 2 | 2 | 2 |
| .. | .. | | .. | .. | | .. | .. | .. |
इस तरह से मैं प्रत्येक उत्पाद या उपयोगकर्ता के लिए user_product_vote तालिका की गिनती कर सकते हैं।
उदाहरण के लिए, जब मैं केले और वोटों की संख्या को देखने के लिए एक वेब पेज मैं निम्न क्वेरी प्रदर्शन कर सकता है पर दिखाना चाहते हैं: (
SELECT p.product AS product, COUNT(v.id) as votes
FROM product p
LEFT JOIN user_product_vote v ON p.id = v.product_id
WHERE p.id =1
तो मेरी साइट बेहद सफल हो गया है कि हम सब सपना कर सकते हैं) और मेरे पास हजारों उपयोगकर्ता हजारों उत्पादों पर मतदान कर रहे थे, मुझे डर है कि प्रत्येक पृष्ठ दृश्य के साथ ऐसा COUNT प्रदर्शन सर्वर संसाधनों के मामले में अत्यधिक अक्षम होगा।
एक और आसान तरीका उत्पाद तालिका में 'वोट' कॉलम होना होगा जो प्रत्येक बार वोट जोड़े जाने पर बढ़ाया जाता है।
table: product
+----+-------------+-------+
| id | product | votes |
+----+-------------+-------+
| 1 | bananas | 2 |
| 2 | apples | 5 |
| .. | .. | .. |
हालांकि यह अधिक संसाधन अनुकूल है - मैं डेटा (। उदाहरण के लिए मैं अब एक व्यक्ति दो बार मतदान से वहाँ के रूप में उनके मतदान गतिविधि का कोई रिकॉर्ड नहीं है रोका जा सकता है) खो देते हैं।
मेरे प्रश्न हैं:
i) क्या मैं सर्वर संसाधनों के बारे में अत्यधिक चिंतित हूं और केवल तीन तालिका विकल्प के साथ रहना चाहिए? (यानी मुझे बड़े प्रश्नों को संभालने के लिए डेटाबेस की क्षमता में अधिक विश्वास करने की आवश्यकता है)
ii) जानकारी खोने के बिना परिणाम प्राप्त करने का उनका एक अधिक प्रभावी तरीका है
आपकी समस्या यह है कि आपके पास शायद ऐसी वेबसाइट नहीं है जो बड़े पैमाने पर यातायात प्राप्त करती है, इसलिए PHP/mysql क्षमताओं की आपकी अनिश्चितता, मैं आपको आश्वस्त करता हूं कि MySQL एक हजारों प्रश्नों को एक दूसरे से अधिक प्रदर्शन करने के साथ संभाल सकता है – RobertPitt