我必须获取在两个日期之间具有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