mysql - 从 MySQL 查询结果中计算子查询数量

标签 mysql

我不知道如何解释这一点,但我正在尝试优化我的第二个查询并正确编写它。

此查询速度很快 - 0.0005 秒

select 
  wp_users.ID
from wp_users
  inner join wp_usermeta
    on wp_users.ID = wp_usermeta.user)id
where wp_usermeta.meta_value like '%user%'
limit 10

当我添加此子查询时,它会显着减慢速度 - 5.4 秒

select 
  wp_users.ID,
  (select count(*) from wp_postmeta where meta_key = wp_users.ID) as posts_read
from wp_users
  inner join wp_usermeta
    on wp_users.ID = wp_usermeta.user)id
where wp_usermeta.meta_value like '%user%'
limit 10

当我增加限制时,执行时间当然会增加。有没有办法编写它以使其执行速度更快?

最佳答案

首先要尝试的是在 wp_postmeta (meta_key) 上建立索引。

如果左连接派生表进行聚合一次有帮助,您也可以尝试。

SELECT wp_users.id,
       coalesce(wp_postmeta.count, 0) posts_read
       FROM wp_users
            INNER JOIN wp_usermeta
                       ON wp_users.id = wp_usermeta.user_id
            LEFT JOIN (SELECT count(*) count,
                              wp_postmeta.meta_key
                              FROM wp_postmeta
                              GROUP BY wp_postmeta.meta_key) wp_postmeta
                      ON wp_postmeta.meta_key = wp_users.id
       WHERE wp_usermeta.meta_value LIKE '%user%'
       LIMIT 10;

我猜 wp_users (id) 上的索引已经存在。 wp_usermeta (user_id, meta_value) 上的一个也可能有帮助。

如果可能,您不应在字符串开头对通配符使用 LIKE。因此,如果可能的话,使用 LIKE 'user%' 代替,甚至使用 = 'user...' (用正确的值填充 ... )。

关于mysql - 从 MySQL 查询结果中计算子查询数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55737309/

相关文章:

mysql - SQL查询返回0行

php - 将多个图像移动到数据库

php - mySQL:我需要在 int 列中输入小数

java - 在 Hibernate @Formula 中使用 DATE_ADD

MySQL - 行到列

php - 数据库值在 for 循环中重复

mysql - 使用 LEFT JOIN + ORDER BY 时如何避免文件排序?

php - 我在插入 "call to undefined method mysqli_stmt::get_result()"上不断收到此错误

SQL 获取日期时间相差 5 天或更少的行

mysql - 提供对 phpmyadmin 页面的读/写访问