2011-01-18 10 views
6

मैंने एक बार एक प्रदर्शन ब्लॉग में पढ़ा है कि mysql दिनांक फ़ंक्शंस जैसे curdate() की बजाय MySQL क्वेरी में दिनांक सेट करने के लिए PHP के दिनांक फ़ंक्शंस का उपयोग करना बेहतर है क्योंकि mysql तब क्वेरी को कैश कर सकता है या परिणाम या ऐसा कुछ। क्या किसी के पास इसमें कोई अंतर्दृष्टि है? क्या इसमें कोई पानी है या यह आधारहीन है?MySQL कैश और दिनांक फ़ंक्शंस

उदाहरण:

$query = 'SELECT id FROM table WHERE publish_date = \''.date('Y-m-d').'\''; 

बनाम

$query = 'SELECT id FROM table WHERE publish_date = CURDATE()'; 

उत्तर

7

CURDATE() युक्त किसी भी समारोह कैश्ड नहीं किया जाएगा। Source

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

+0

बिल्कुल वही जो मैं खोज रहा था। धन्यवाद! – dqhendricks

0

मैं व्यक्तिगत रूप से पहला तरीका preffer, क्योंकि यह सर्वर समय (समय क्षेत्र), मेरे mysql सर्वर happend होने के लिए के बारे में स्पष्ट सिर दे 10h पहले जब promissed :) अपने PHP स्क्रिप्ट में

स्थानीयसमय एसक्यूएल

में लागू होगी
+0

जबकि हाथ में सवाल का जवाब नहीं है, फिर भी एक अच्छा मुद्दा है। – dqhendricks

2

यह वास्तव में काफी सरल है। MySQL सर्वर आपके PHP कोड नहीं देखता तो यह इनमें से किसी एक प्राप्त करेंगे:

SELECT id FROM table WHERE publish_date = '2010-01-18'; 
SELECT id FROM table WHERE publish_date = CURDATE(); 

यह या तो अपने इरादों को पढ़ नहीं होंगे। MySQL के लिए, '2010-01-18' एक स्ट्रिंग है और निर्धारक है: इसका मान हमेशा '2010-01-18' होता है। हालांकि, CURDATE() निर्धारणात्मक नहीं है: इसका मूल्य उस तारीख के आधार पर भिन्न होता है जब आप इसे चलाते हैं। इस प्रकार पहला वाला कैशबल है और दूसरा नहीं है।

+0

हाँ, मुझे पता है कि mysql मेरा php नहीं देख सकता है और एक स्ट्रिंग प्राप्त करता है। मुझे पता है कि यह निश्चित रूप से इस क्वेरी को कैश कर सकता है। मैं अनिश्चित था कि MySQL के लिए दिन के अंत तक या उस प्रकृति के कुछ समय तक दही के साथ एक क्वेरी कैश करना संभव था। – dqhendricks

+0

@dhehendricks वैसे, MySQL अंतर्निहित तालिकाओं की संशोधन तिथियों के माध्यम से एक कैश किए गए परिणाम की वैधता निर्धारित करता है। यह उससे अधिक जटिल नहीं है। –

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