2008-09-22 5 views
7

एक बड़ी तालिका से रिकॉर्ड्स की कुल संख्या का चयन करने का सबसे प्रभावी तरीका क्या है? वर्तमान में, मैं बसphp के साथ एक mysql तालिका में कुल # रिकॉर्ड्स प्राप्त करने का सबसे अच्छा तरीका क्या है?

$result = mysql_query("SELECT id FROM table"); 
$total = mysql_num_rows($result) 

मुझे बताया गया कि यह बहुत कुशल या तेज़ नहीं है, अगर आपके पास तालिका में बहुत से रिकॉर्ड हैं।

उत्तर

27

आप सही ढंग से कहा गया था। MySQL आपके लिए यह गिनती कर सकता है जो अधिक कुशल है।

$result = mysql_query("select count(id) as num_rows from table"); 
$row = mysql_fetch_object($result); 
$total = $row->num_rows; 
0

क्या कुछ इस तरह के बारे में:

$result = mysql_query("SELECT COUNT(id) AS total_things from table"); 
$row = mysql_fetch_array($result,MYSQL_ASSOC); 
$num_results = $row["total_things"]; 
+0

हां, यह रूप में अच्छी तरह से काम करेगा। – Wayne

2

MySQL documentation इस सबसे कारगर है आप एक MyISAM तालिका (जो इस्तेमाल किया तालिकाओं का सबसे सामान्य प्रकार है) उपयोग कर रहे हैं के अनुसार:

$result = mysql_query("SELECT COUNT(*) FROM table"); 

अन्यथा आपको वेन के रूप में करना चाहिए और सुनिश्चित करें कि गिना गया कॉलम अनुक्रमित है।

+0

नाइस - मुझे नहीं पता था कि उन्होंने गिनती (*) अनुकूलित की है जब कोई अन्य कॉलम चयनित नहीं है। फिर भी, मुझे प्रासंगिक कॉलम पर गणना करने पर आदत में रहना पसंद है, जो आम तौर पर प्राथमिक कुंजी है। –

1

क्या मैं अभी जोड़ सकता हूं, रिकॉर्ड की कुल संख्या प्राप्त करने का सबसे अधिक "कुशल" तरीका, विशेष रूप से एक बड़ी तालिका में, कुल राशि को किसी अन्य तालिका में एक संख्या के रूप में सहेजना है। इस तरह, जब भी आप कुल प्राप्त करना चाहते हैं, तो आपको पूरी तालिका से पूछताछ करने की आवश्यकता नहीं है।

हालांकि, आपको पंक्ति में जोड़े/हटाए जाने पर उस नंबर को बढ़ाने या घटाने के लिए डेटाबेस में कुछ कोड या ट्रिगर्स सेट करना होगा।

तो यह सबसे आसान तरीका नहीं है, लेकिन यदि आपकी वेबसाइट बढ़ती है, तो आपको निश्चित रूप से ऐसा करने पर विचार करना चाहिए।

3

MyISAM तालिकाओं पहले से ही पंक्ति गिनती

SELECT COUNT(*) FROM table 
एक MyISAM तालिका पर

स्टोर बस उस मूल्य पढ़ता है। यह तालिका या सूचकांक (एसएस) स्कैन नहीं करता है। तो, यह एक अलग तालिका से मूल्य पढ़ने की तुलना में तेज़ या तेज़ है।

0

बस यह ध्यान रखना चाहता था कि SHOW TABLE STATUSRows कॉलम देता है, हालांकि मैं इसकी दक्षता से बात नहीं कर सकता। कुछ प्रकाश गुगलिंग दो साल पहले MySQL 4 में धीमेपन की रिपोर्ट बदल जाती है। दिलचस्प समय परीक्षण के लिए बना सकते हैं।

गलत गणनाओं के संबंध में InnoDB caveat पर भी ध्यान दें।

1

भले ही मैं अंतर्निहित कार्यों का उपयोग करने के लिए सहमत हूं, मैं वास्तव में mysql_num_rows और गिनती (आईडी) के बीच कोई प्रदर्शन अंतर नहीं देखता हूं। 25000 परिणामों के लिए, एक ही प्रदर्शन (सटीक कह सकता है।) बस रिकॉर्ड के लिए।

0

कुल कार्य का उपयोग करें। नीचे दिए गए एसक्यूएल कमांड

$num= mysql_query("SELECT COUNT(id) FROM $table"); 
0

mysqli_query() को बहिष्कृत करें।बेहतर इसका उपयोग करें:

$result = $dbh->query("SELECT id FROM {table_name}"); 
$total = $result->num_rows; 

पीडीओ का उपयोग करना:

$result = $dbh->query("SELECT id FROM {table_name}"); 
$total = $result->rowCount(); 

(जहां '$ DBH' = डाटाबेस के हत्थे से जुड़े)

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

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