我不是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