作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道如何解释这一点,但我正在尝试优化我的第二个查询并正确编写它。
此查询速度很快 - 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/
我是一名优秀的程序员,十分优秀!