我不是MySQL的专家,但我已经管理到现在一起破解一些有效的东西。不幸的是,我最近的尝试导致服务器死机,所以很明显我正在做一些效率非常低的事情。任何人都可以给我一个提示,说明问题出在哪里,以及如何每次都不用整个站点都能得到相同的结果?低效SQL
$sqlbest = "SELECT
wp_postmeta.meta_value
, wp_posts.post_title
, wp_posts.ID
, (TO_DAYS(CURDATE())- TO_DAYS(wp_posts.post_date))+1 AS days
FROM `wp_postmeta` , `wp_posts`
WHERE `wp_postmeta`.`post_id` = `wp_posts`.`ID`
AND `wp_posts`.`post_date` >= DATE_SUB(CURDATE() , INTERVAL 1 WEEK)
AND `wp_postmeta`.`meta_key` = 'views'
AND `wp_posts`.`post_status` = 'publish'
AND wp_posts.ID != '".$currentPostID."'
GROUP BY `wp_postmeta`.`post_id`
ORDER BY (CAST( `wp_postmeta`.`meta_value` AS UNSIGNED)/days) DESC
LIMIT 0 , 4";
$results = $wpdb->get_results($sqlbest);
它采用了后观看次数来计算的意见/天发表在最后,再由这个数字令他们的职位,并抓住了4强。
我想我看到它的低效它必须每次计算几千个帖子的观看次数/天,但我不知道如何做得更好。
在此先感谢。
您确定这是一个效率问题,而不是简单的语法错误或代码中导致错误的其他内容?究竟发生了什么,你有什么错误吗? – 2011-05-04 12:51:46
此外,您应该直接在您的服务器上运行此查询,看看会发生什么 – JohnP 2011-05-04 13:00:23
尝试消除'order by'子句,看它是否有帮助 – ZaQ 2011-05-04 13:15:42