2011-01-18 17 views
6

パフォーマンスブログでは、curdate()のようなmysqlの日付関数を使用するのではなく、PHPの日付関数を使用して日付を設定するほうがよいことを読んでいます。結果かそのようなもの。誰にもこれについての洞察はありますか?それは水を保持しているのか、それとも根拠がないのですか?MySQLキャッシュと日付関数

例:CURDATE()を含む任意の関数がキャッシュされません

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

答えて

7

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

Source

日付をハードコードすることは、私が知る限りキャッシュされます。クエリに文字列を連結するのではなく、prepare機能を使用することを検討することもできます(健全性とセキュリティのため)。

+0

私が探していたもの。ありがとう! – dqhendricks

0

それはあなたのPHPスクリプトでpromissed :)

localtimeのは、SQL

に適用されるとき、以前の10hのように、サーバーの時間(タイムゾーン)についての私のMySQLサーバ起こったの明確な頭部を与えるので、私は個人的には、最初の方法をpreffer
+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()は確定的ではありません。その値は、実行する日付によって異なります。したがって、最初のものはキャッシュ可能であり、2番目のものはキャッシュ不可能です。

+0

はい、私はmysqlが私のPHPを見ることができないと知っていると文字列を受け取ります。私はそれが確実にこのクエリをキャッシュすることができます知っている。 mysqlがcurdateを使ってクエリをキャッシュすることが可能かどうかは確かではありませんでした。 – dqhendricks

+0

@dqhendricksさて、MySQLは、キャッシュされた結果の有効性を、基礎となるテーブルの変更日によって決定します。それ以上の複雑さはありません。 –