गणना तालिका पंक्तियाँ


165

एक तालिका में रिकॉर्ड की संख्या को पुनः प्राप्त करने के लिए MySQL कमांड क्या है?

जवाबों:


236
SELECT COUNT(*) FROM fooTable;

तालिका में पंक्तियों की संख्या की गणना करेगा।

संदर्भ पुस्तिका देखें ।


7
जब मैं * के बजाय अनुक्रमित स्तंभ के नाम का उपयोग करता हूं तो क्या यह कोई तेज़ है? इस तरह: SELECT COUNT (id) FROMtablename

1
बस थोड़ा सा। मुझे २१ ९ ६१ ९ ०४ की एक पंक्ति तालिका मिली, जो कि उनके COUNT ने ११५ सेकंड में बताई, जबकि आईडी का उपयोग करते हुए १० sec सेकंड का समय लगा।
बॉन्डोलिन

2
COUNT (*) एक सख्त भाषा परिभाषा है। यदि आप COUNT (*) स्थान नोट करने की कोशिश करते हैं तो आपको एक पार्स त्रुटि मिलेगी
ppostma1

9
आप कर सकते हैं COUNT(1), यह सबसे तेज़ तरीका होगा।
शोता पापाश्विली

PHP में एक चर लिखने के लिए COUNT () का उपयोग करने का सबसे अच्छा तरीका क्या है? क्या मैं SQL में "... COUNT (*) AS rowCount ..." करता हूं, क्या यह $ परिणामों का उपयोग करता है-> num_rows, या क्या इस परिणाम को सीधे कॉल करने का कोई तरीका है?
नौसाजिमी

71

क्योंकि किसी ने इसका उल्लेख नहीं किया:

show table status;

प्रत्येक तालिका के लिए अनुमानित पंक्तियों सहित कुछ अतिरिक्त जानकारी के साथ सभी तालिकाओं को सूचीबद्ध करता है। यह वही है जो phpMyAdmin अपने डेटाबेस पेज के लिए उपयोग कर रहा है।

यह जानकारी MySQL 4 में उपलब्ध है, शायद MySQL 3.23 में भी - लंबे समय पूर्व सूचना स्कीमा डेटाबेस में।

अपडेट करें:

क्योंकि डाउन-वोट था, मैं स्पष्ट करना चाहता हूं कि दिखाया गया नंबर इनोबीडी और टोकुबीडी के लिए अनुमानित है और यह MyISAM और आरिया (मारिया) भंडारण इंजनों के लिए बिल्कुल सही है।

प्रति प्रलेखन :

पंक्तियों की संख्या। कुछ संग्रहण इंजन, जैसे कि MyISAM, सटीक गणना को संग्रहीत करते हैं। अन्य भंडारण इंजनों के लिए, जैसे कि InnoDB, यह मान एक सन्निकटन है, और वास्तविक मूल्य से 40% से 50% तक भिन्न हो सकता है। ऐसे मामलों में, सटीक गिनती प्राप्त करने के लिए SELECT COUNT (*) का उपयोग करें।

यह MySQL पर पंक्ति गणना देखने का सबसे तेज़ तरीका है, क्योंकि क्वेरी जैसे:

select count(*) from table;

पूर्ण तालिका स्कैन करना बहुत महंगा ऑपरेशन हो सकता है जो बड़े उच्च लोड सर्वर पर घंटों लग सकता है। यह डिस्क I / O को भी बढ़ाता है।

एक ही ऑपरेशन आवेषण और अपडेट के लिए तालिका को अवरुद्ध कर सकता है - यह केवल विदेशी भंडारण इंजन पर होता है।

InnoDB और TokuDB टेबल लॉक के साथ ठीक हैं, लेकिन पूर्ण टेबल स्कैन की आवश्यकता है।


3
यह पंक्तियों को गिनने का सबसे कुशल तरीका है। मुझे आश्चर्य है कि इसका जवाब क्यों नहीं है? मैं InnoDB का उपयोग कर रहा हूं। टेबल लॉक के साथ, पंक्तियों की संख्या सही होनी चाहिए?
चुंग लून यूएन

निर्दोष के लिए यह अनुमानित है । लेकिन आप इसे कुछ मामलों में उपयोग कर सकते हैं "हमारी वेबसाइट में xxx सदस्य हैं", "हमने पाया कि xxx परिणाम आपके जैसे हैं" और इसी तरह।
निक

मुझे यकीन नहीं है। लेकिन इनोडब के लिए वास्तविक गिनती नहीं है। लेकिन मिलियन रो टेबल के लिए काफी उपयोगी है।
निक

4
प्रत्येक पंक्ति को गिनने के लिए तालिकाओं के माध्यम से जाने से पंक्ति गणना नहीं बल्कि हास्यास्पद होती है। इसलिए मैं इस उत्तर को भी पसंद करता हूं।
th3penguinwhisperer

35

हमारे पास selectउस तालिका में क्वेरी को चलाए बिना किसी तालिका में पंक्तियों की संख्या जानने का एक और तरीका है ।

हर MySQL उदाहरण में info_schema डेटाबेस है। यदि आप निम्नलिखित क्वेरी चलाते हैं, तो यह तालिका के बारे में संपूर्ण विवरण देगा, जिसमें उस तालिका में पंक्तियों की अनुमानित संख्या भी शामिल होगी ।

select * from information_schema.TABLES where table_name = 'table_name'\G

क्या यह तेजी से और साथ ही एक MyISAM टेबल पर है क्योंकि MyISAM पंक्तियों की संख्या को संग्रहीत कर रहा है?
नेचुरलबोर्नकेंपर

मैंने कभी भी MyISAM पर इसका परीक्षण नहीं किया।
संतोष तांगुडू



3

बस एक करो

SELECT COUNT(*) FROM table;

आप उसके बाद कहां से शर्तों को निर्दिष्ट कर सकते हैं

SELECT COUNT(*) FROM table WHERE eye_color='brown';

3

यदि आपकी तालिका में कई फ़ील्ड हैं और आपकी तालिका बहुत बड़ी है, तो इसका उपयोग बेहतर नहीं है* क्योंकि यह सभी फ़ील्ड्स को मेमोरी में लोड करता है और निम्नलिखित का उपयोग करने से बेहतर प्रदर्शन होगा

SELECT COUNT(1) FROM fooTable;

यह गलत है। देखें stackoverflow.com/questions/5179969/… COUNT (1) वास्तव में MyISAM के लिए बहुत धीमा हो सकता है।
jcoffland

@jcoffland आप अपने आप से टी की कोशिश कर सकते हैं, खासकर जब आपके पास ज्वाइन होता है या जहां स्थितियां गिनती (*) की तुलना में बहुत तेज होंगी।
युसेफरी

2

जैसा कि संतोष ने उल्लेख किया है , मुझे लगता है कि सभी तालिका को क्वेरी नहीं करते हुए यह क्वेरी काफी तेजी से है।

किसी विशेष डेटाबेस में विशिष्ट टैबलेन के लिए, डेटा रिकॉर्ड की संख्या का पूर्णांक परिणाम वापस करने के लिए :

select TABLE_ROWS from information_schema.TABLES where TABLE_SCHEMA = 'database' 
AND table_name='tablename';

1
यह अनुमानित पंक्तियों की संख्या लौटा सकता है। एक उदाहरण में, मुझे COUNT (*) का उपयोग करके 55,940,343 पंक्तियाँ मिलीं, लेकिन 56,163,339 इस पद्धति का उपयोग करते हुए इसलिए यह 200k से अधिक बंद थी।
jcoffland

@jcoffland, मैंने _ संतोष द्वारा उत्तर का उल्लेख किया है जिसके ऊपर परिणाम अनुमानित है । मेरा उत्तर एक अधिक विस्तृत व्यावहारिक प्रश्न है। यदि आप count(*)प्रदर्शन जागरूकता के साथ सटीक गणना का उपयोग करना चाहते हैं, तो इसका बहुत स्पष्ट जवाब है
मोहम्मद कानन

1
$sql="SELECT count(*) as toplam FROM wp_postmeta WHERE meta_key='ICERIK' AND post_id=".$id;
$total = 0;
$sqls = mysql_query($sql,$conn);
if ( $sqls ) {
    $total = mysql_result($sqls, 0);
};
echo "Total:".$total;`

यह उत्तर पुराना है, mysql_result को PHP 5.5.0 में पदावनत किया गया है और PHP 7.0.0 में हटा दिया गया है
इस दुनिया

1

आपको गणना का उपयोग करना होगा () निर्दिष्ट मानदंड से मेल खाने वाली पंक्तियों की संख्या लौटाता है

select count(*) from table_name;

0

यदि आपके पास एक प्राथमिक कुंजी या एक अद्वितीय कुंजी / सूचकांक है, तो तेज़ विधि संभव है (4 लाख पंक्ति तालिकाओं के साथ परीक्षण किया गया)

SHOW INDEXES FROM "database.tablename" WHERE Key_Name=\"PRIMARY\"

और फिर कार्डिनैलिटी फ़ील्ड प्राप्त करें (यह तत्काल के करीब है)

टाइम्स जहां 0.4s से 0.0001ms तक है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.