gpt4 book ai didi

mysql - 如何优化这个wordpress mysql查询?

转载 作者:行者123 更新时间:2023-11-29 08:35:04 25 4
gpt4 key购买 nike

我正在从 xml 文件导入到 wordpress 数据库中。我将城镇和地点作为每个帖子的元值导入。

我没有预定义的城镇和位置列表,因此我需要获取所有位置(简单的事情)并获取这些位置内的所有城镇(我在这里遇到问题)

我现在的查询是:

SELECT t1.meta_value 
FROM wp_postmeta t1
INNER JOIN wp_postmeta t2 ON (t1.post_id = t2.post_id)
WHERE t2.meta_key = '_prop_loc'
AND t2.meta_value="Málaga"
AND t1.meta_key = '_prop_town'
GROUP BY t1.meta_value

例如,如果我尝试获取“马拉加”位置的所有城镇,我就会使用此查询结束。在本地主机上测试它,查询运行

showing records 0 - 29 ( 101 total, total time 1.3289 seg)

如果我按时间减少组取出,但当然我会得到重复的行。如果我使用 select unique 和 order ASC,时间会再次上升。

我确实想要对结果进行排序,但是超过一秒的查询是不行的

wp_postmeta 表:

CREATE TABLE `wp_postmeta` (
`meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`post_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`meta_key` varchar(255) DEFAULT NULL,
`meta_value` longtext,
PRIMARY KEY (`meta_id`),
KEY `post_id` (`post_id`),
KEY `meta_key` (`meta_key`)
) ENGINE=*** DEFAULT CHARSET=utf8;

最佳答案

我假设您没有在默认 WP 设计上添加任何更多索引。

您可以在(meta_key, meta_value, post_id)上添加索引

还有一个(meta_key、post_id、meta_value)

更新:meta_value 是一个text 列,因此这不是一个选项。您可以尝试在该列上创建第一个部分索引,而不将其包含在第二个索引中:

ALTER TABLE wp_postmeta 
ADD INDEX meta_key__meta_value__post_id__IX
(meta_key, meta_value(20), post_id),
ADD INDEX meta_key__post_id__IX
(meta_key, post_id) ;

您还可以尝试重写查询:

SELECT t1.meta_value 
FROM wp_postmeta t1
WHERE t1.meta_key = '_prop_town'
AND EXISTS
( SELECT *
FROM wp_postmeta t2
WHERE t2.meta_key = '_prop_loc'
AND t2.meta_value = "Málaga"
AND t2.post_id = t1.post_id
)
GROUP BY t1.meta_value ;

关于mysql - 如何优化这个wordpress mysql查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15455135/

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