mysql - wp_posts 上的 Wordpress 慢查询
问题描述
我们有一个带有 wp_posts 中 200 万条记录的数据库的 wordpress,新的遗物表明我们有几个慢查询,但这个正在占用
SELECT wp_posts.ID
FROM wp_posts
WHERE ?=? AND wp_posts.post_type = ? AND ((wp_posts.post_status = ?)) ORDER BY wp_posts.post_title ASC
LIMIT ?, ?
它正在解释这一点:
我不知道如何优化这个查询,但我想我需要添加一个索引(id、post_type、post_status 和 post_title)?
解决方案
你需要的是INDEX(type, status, title, ID)
. 但这行不通,因为索引中不能有TEXT
(如post_title
)列。
所以没有优化也没有有用的索引。
WP 不是按比例设计的。postmeta
2M 行已经很多了,尽管没有加入到其他表时那么糟糕。
这个查询需要收集所有某种类型和状态的标题,排序,跳过OFFSET
,最后传递一些ID。
如果您OFFSET
因为“分页”而使用,那么您还有第二个问题——当用户翻阅列表时,查询会越来越慢。(注意我提到的“跳过”步骤。)
如果您可以将标题限制在 255 个以下(或者可能是 191 个,取决于版本和字符集)字符,那么INDEX
我提到的将起作用,并且它会工作得更快。如果任何标题被截断,这将涉及并ALTER TABLE
更改post_title
为VARCHAR(...)
需要一些时间并丢失数据。
一个可能的解决方案......由于向用户提供 2M 行是不合理的,我们可以猜测type
和/或status
相当有选择性吗?也就是说,真的最多只有几百行感兴趣吗?在这种情况下,这可能会有所帮助:
INDEX(post_type, post_status) -- in either order.
推荐阅读
- javascript - 如何从 Firebase 数据库中获取键值为电子邮件的特定数据?
- javascript - 如何调用 modules.export 路由作为 api?
- android - Android NearBy API 非常慢(发现和连接约 10 秒以上)
- svg - SVG 渲染问题。SVG 在不同 Shopify 产品页面上的呈现方式不同
- python - AttributeError:“设置”对象没有属性“MEDIA_URL”
- laravel - 方法 Illuminate\Support\Str::of 不存在
- jquery - ajax 每次都从数据库中获取相同的数据
- pdf-generation - 使用 jasper 软件版本 6.13.0 创建的 pdf 文件中看不到日语内容
- java - Intellij IDEA 不构建 maven 项目
- unity3d - 为什么 Unity 给我构建错误