2011-09-15 9 views
6

मेरे पास एक PHP पृष्ठ पर कई SELECT कथन हैं, और मैंने उनको उत्पन्न करने के लिए ड्रीमवेवर का उपयोग किया।mysql_num_rows() php - क्या यह कुशल है?

कोड उत्पन्न होने के बाद, ऐसा लगता है कि मैं कई परिस्थितियों में कटौती कर सकता हूं, प्रत्येक कथन के लिए mysql_num_rows() लाइन एक उदाहरण है।

तो मैं सोच रहा हूं कि कोई मुझे बता सकता है कि यह वास्तव में संसाधनों को बचाता है या नहीं - इस पर विचार किए बिना सवाल चल रहा है, क्या इसके लिए कोई वास्तविक ओवरहेड है?


अद्यतन: microtime के बारे में Chriszuma के सुझाव के बाद, यहाँ मेरी परिणाम हैं:

//time before running the query 
1: 0.46837500 1316102620 

//time after the query ran 
2: 0.53913800 1316102620 

//time before calling mysql_num_rows() 
3: 0.53914200 1316102620 

//time after mysql_num_rows() 
4: 0.53914500 1316102620 

तो बहुत ज्यादा नहीं भूमि के ऊपर बिल्कुल, ऐसा लगता है

+0

PHP में फ़ंक्शन कॉल पर हमेशा ओवरहेड होता है, लेकिन आमतौर पर यह न्यूनतम होता है, जब तक कि आप इसे सैकड़ों हजारों बार नहीं बुलाते ... – DaveRandom

उत्तर

3

मैं उम्मीद होती है इस तरह के एक फोन होगा कि प्रदर्शन पर बेहद कम प्रभाव पड़ता है। यह सिर्फ अपने आंतरिक रूप से संग्रहीत क्वेरी परिणाम की पंक्तियों की गणना कर रहा है। एसक्यूएल क्वेरी स्वयं प्रसंस्करण समय का विशाल बहुमत ले जा रही है।

यदि आप निश्चित रूप से जानना चाहते हैं, तो आप यह देखने के पहले और बाद में कॉल करने से पहले microtime() निष्पादित कर सकते हैं कि यह कितना समय ले रहा है।

$startTime = microtime(true); 
mysql_num_rows(); 
$time = microtime(true) - $startTime; 
echo("mysql_num_rows() execution: $time seconds\n"); 

मेरा संदेह यह है कि आप माइक्रोसेकंड रेंज में कुछ देखेंगे।

+1

यह काम करता है हालांकि मैंने कोड लिखते समय एक त्वरित और गंदा परीक्षण किया था केवल माइक्रोटाइम() को हर बार स्वयं कहा जाता है :) – jammypeach

4

mysql_num_rows() के बाद पंक्तियों की गणना करता है। ऐसा लगता है कि आप सभी पंक्तियां प्राप्त कर चुके हैं और उन्हें एक PHP सरणी में संग्रहीत किया है, और फिर count($array) चलाया। लेकिन mysql_num_rows() को MySQL क्लाइंट लाइब्रेरी के भीतर सी में कार्यान्वित किया गया है, इसलिए यह समकक्ष PHP कोड से थोड़ा अधिक कुशल होना चाहिए।

ध्यान दें कि mysql_num_rows() को काम करने के लिए, आपको PHP की मेमोरी स्पेस में अपनी क्वेरी का पूर्ण परिणाम प्राप्त करना होगा। तो इस अर्थ में ओवरहेड है कि एक क्वेरी परिणाम सेट बड़ा हो सकता है, और बहुत सारी मेमोरी ले सकती है।

+1

+1 यही कारण है कि जब आप [mysql_unbuffered_query] (http://php.net/manual/en/function.mysql-unbuffered-query] का उपयोग करते हैं तो 'mysql_num_rows' काम नहीं करेगा। php) – webbiedave

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