我必須獲取在兩個日期之間具有publish_date的數據庫中的所有條目。所有日期都以整數形式存儲,因爲日期採用UNIX TIMESTAMP格式... 以下查詢完美無缺,但需要「太長時間」。它會返回10到20之前的所有條目。優化SQL查詢
SELECT * FROM tbl_post WHERE published < (UNIX_TIMESTAMP(NOW())-864000)
AND published> (UNIX_TIMESTAMP(NOW())-1728000)
有沒有什麼辦法可以優化這個查詢?如果我沒有弄錯,它會調用evey條目上的NOW()和UNIX_TIMESTAMP。我認爲將這兩個重複函數的結果保存到mysql @var中會使得比較速度更快,但它沒有。我運行的第二個代碼是:
SET @TenDaysAgo = UNIX_TIMESTAMP(NOW())-864000;
SET @TwentyDaysAgo = UNIX_TIMESTAMP(NOW())-1728000;
SELECT * FROM tbl_post WHERE fecha_publicado < @TenDaysAgo
AND fecha_publicado > @TwentyDaysAgo;
另一個令人困惑的事情是,PHP無法通過mysql_query()運行bove查詢; ?!
請,如果你對這個問題的任何意見會比歡迎:)
盧卡更多
請注意,NOW()是一個常量表達式,它表示語句何時開始執行。所以MySQL沒有理由不能將'UNIX_TIMESTAMP(NOW()) - 864000'轉換成一個常量表達式。 (我不知道它是否......只是它很容易就可以。) – Matthew 2011-04-25 17:12:09