mysql - 低效的 SQL

标签 mysql sql wordpress

我不是 MySQL 专家,但我一直设法拼凑出一些有用的东西。不幸的是,我最近的尝试导致服务器死机,所以显然我正在做一些非常低效的事情。任何人都可以提示我问题出在哪里以及如何在不每次都关闭整个站点的情况下获得相同的结果吗?

$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 名。

我想我发现它的效率很低,因为它必须每次都计算几千个帖子的浏览量/天,但我不知道如何做得更好。

提前致谢。

最佳答案

您可以消除每次都调用这些日期函数的需要,方法是将它们静态传递到 PHP 服务器(可能未与您的数据库同步)的查询中,或者您可以编写一个存储过程并保存结果那些将在查询中使用的变量的日期函数。

关于mysql - 低效的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5883665/

相关文章:

mysql - ios解析一个查询多对多关系

mysql - Docker 无法在 "localhost/subpage"上工作

javascript - 三个表单一键提交

php - 如何在 codeigniter 中查询 JSON 数据类型?

c# - 由于 SQL 字符串而重复值?

sql - JOIN 和 INNER JOIN 之间的区别

php - 如何防止 PHP 中的 SQL 注入(inject)?

mysql - 设置 auto_increment_increment = 1 对现有表的影响

html - 如何正确设置社交媒体链接的样式

WordPress 主题无法从本地正确导入到在线