有没有办法提高这个简单的 WordPress 数据库查询的性能?

Posted

技术标签:

【中文标题】有没有办法提高这个简单的 WordPress 数据库查询的性能?【英文标题】:Is there a way to improve the performance of this simple WordPress database query? 【发布时间】:2021-08-02 20:14:42 【问题描述】:

在优化的 WordPress 数据库上运行简单的SELECT 需要 20 秒,因为它返回 62,000 条记录。有人对如何改进这些时间有任何建议吗?

我的代码:

global $wpdb;
$entries_sql = $wpdb->prepare("SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '%s' AND meta_value='%s'", 'sht_ranking_id', $ranking_id);
$entry_ids = $wpdb->get_results($entries_sql, ARRAY_N);

(我也尝试过使用 phpMyAdmin 运行原始 SQL,但速度并不快。)

【问题讨论】:

【参考方案1】:

具有 62K 行的结果集很大,即使它只有一列(在您的情况下为 post_id)。即使 mysql 以最佳方式工作,也需要时间来检索它。只检索您需要的行总是明智的。

话虽如此,您可以尝试在wp_postmeta 表上添加索引。它可能会优化您查询的 MySQL 方面。

ALTER TABLE wp_postmeta ADD KEY meta_key_value (meta_key(90), meta_value(90), post_id);

请使用 phpmyadmin 运行

EXPLAIN SELECT post_id FROM whatever your query says....

在您添加该密钥之前和之后。如果您通过编辑问题来发布这些 EXPLAIN 的结果,将会很有帮助。

【讨论】:

我已经在 meta_value 中添加了一个 INDEX,并且正在遵循 WordPress VIP 的示例。 (docs.wpvip.com/technical-references/…) 最重进程的 48 秒现在降至 2.2 秒。 @MarkHowells-Mead - 请提供SHOW CREATE TABLE wp_postmeta 在遵循 VIP 建议后的状态。

以上是关于有没有办法提高这个简单的 WordPress 数据库查询的性能?的主要内容,如果未能解决你的问题,请参考以下文章

从另一个 wordpress 远程数据库中提取用户并显示

有没有办法在插件内嵌套的 WordPress 短代码之间传递数据?

为啥wordpress建立数据库连接时出错

有啥方法可以通过数据库设置屏幕选项 wordpress?

wordpress网站不正常显示解决办法

有没有办法在 WordPress 中关闭 jQuery noConflict 模式?