gpt4 book ai didi

mysql - wp_usermeta 查询在加载前挂起几秒钟

转载 作者:行者123 更新时间:2023-11-30 00:40:07 24 4
gpt4 key购买 nike

我有一个几年前为成员(member)网站写的查询。我不太擅长使用 $wpdb (或一般的 MYSQL 代码)来编写自定义查询,并且该网站已经发展了很多。现在 wp_usermeta 表中有大约 150k 行,并且运行查询的页面在加载之前挂起几秒钟。我预计随着时间的推移以及网站获得更多用户,情况会变得更糟。

任何有关如何加快此查询速度的帮助将不胜感激。

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$limit = 15;
$offset = ($paged - 1) * $limit;
$key = 'first_name';

$sql = "SELECT SQL_CALC_FOUND_ROWS {$wpdb->users}.* FROM {$wpdb->users}
INNER JOIN {$wpdb->usermeta} wp_usermeta ON ({$wpdb->users}.ID = wp_usermeta.user_id)
WHERE 1=1
AND wp_usermeta.meta_key = '$key'
AND wp_usermeta.meta_value <> ''
AND wp_users.user_registered < '2014-01-30'
ORDER BY wp_usermeta.meta_value ASC
LIMIT $offset, $limit";

$members = $wpdb->get_results($sql);

$found_rows = $wpdb->get_var("SELECT FOUND_ROWS();");

foreach ($members as $member) { // display member info here }

*注意:我正在分页...不会在一页上显示所有结果。

最佳答案

这里有几件事。

首先,您似乎是按用户名排序,但没有检索或显示它。这有点奇怪。您可以通过 wp_users.user_nicename 进行排序,并省略与 wp_usermeta 的连接。这将节省一些加入时间。该列的值由用户在其个人资料中设置,并反射(reflect)她希望被了解的身份。因此,它很可能是一个合适的排序列。

其次,您将检索 wp_users 中的所有列 (*)。您是否可以避免检索所有这些内容,而是列举您真正需要的一个?这将节省排序时间。

您的查询将变成这样。

 $sql = "SELECT SQL_CALC_FOUND_ROWS 
id, user_login, user_nicename, etc etc
FROM {$wpdb->users}
WHERE user_registered < '2014-01-30'
ORDER BY user_nicename ASC
LIMIT $offset, $limit";

当您对大量用户进行分页时,您陷入了困境,不可避免地会出现效率低下的情况。但这应该比你拥有的更好。

关于mysql - wp_usermeta 查询在加载前挂起几秒钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21840343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com