6

以前、パフォーマンス ブログで、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()';
4

3 に答える 3

7

を含む関数CURDATE()はキャッシュされません。ソース

私が知る限り、日付のハードコーディングはまだキャッシュされているはずです。ただし、クエリに文字列をスプライシングする代わりに、この機能を使用することを検討することをお勧めしprepareます (健全性とセキュリティのため)。

于 2011-01-18T17:17:44.363 に答える
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 番目のものはそうではありません。

于 2011-01-18T17:21:57.917 に答える
0

サーバー時間(タイムゾーン)について明確な頭を与えるので、私は個人的に最初の方法を好む.

PHP スクリプトの localtime は SQL に適用されます

于 2011-01-18T17:18:56.360 に答える