- A+
我想尝试在一个wordpress网站上存储超过100万个帖子,以检查它是否可以做到这一点,所以已经创建了一个随机的帖子,类似于我们想在这个网站上发布的帖子,在导入100万+帖子后,结果是。
有70个帖子的档案馆(index.php)的主要查询需要大约1,60秒。
所以我开始调试查询,这是标准查询。
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE 1=1
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'private')
ORDER BY wp_posts.post_date DESC
LIMIT 1035930, 70
所以我开始处理这个查询,以检查我是否能根据我的要求对其进行优化,在这之后,我们检查了这样的查询只需要0.40秒
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE 1=1
AND wp_posts.post_type = 'post'
LIMIT 1035930, 70
用这一招。
-
如果通过
toORDER BY wp_posts.post_date DESC
查询需要1,20秒(0,40秒赚到)。ORDER BY ID
-
如果删除
,查询需要1秒(0,20秒赚)。ORDER BY
-
如果删除
的查询需要0,40秒(0,60秒赚)。AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
所以巨大的条件是
和post_status
ORDER BY
在我的项目中不需要 "post_status",所以我可以删除它?
ORDER BY,而用mysql可以在php中替代它吗?我知道php更快,对吗?
那么我怎样才能改进这个查询呢?
那么我怎样才能用最快的查询来代替主查询,例如,我试图用这段代码来删除order by
add_filter ('posts_orderby', 'bm_featureHomeFilterOrder');
function bm_featureHomeFilterOrder ($order = '') {
global $wpdb;
$order = 'none';
return $order;
}
但对 "无 "不适用,只对其他变量如ID-标题等适用。
能否使用本地的mysql查询和pre_get_post来删除它?
像 :
$query = $wpdb->get_results( "SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM $wpdb -> wp_posts
WHERE 1=1
AND wp_posts.post_type = 'post'
LIMIT 12080, 70" );
该网站是用这种配置托管的。
- php 7 FPM
- 疯疯癫癫
- memcached(数据库缓存和对象缓存)。
- APC
- 兴发xf187在线娱乐 NGINX
- 用mysqltuner调整了mariadb配置。
这个配置是由easyengine脚本完成的。
使用的主题是启动器主题https://underscores.me/,检查代码以了解索引.php页面的更多信息。
在档案中检索到的数据是(只有特色图片+标题)。
在单篇文章中检索的数据是(标题、类别、内容、25个相关文章)。
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫