繁体   English   中英

如何优化这个wordpress mysql查询?

[英]How to optimize this wordpress mysql query?

我从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

例如,如果我试图获得“马拉加”位置的所有城镇,我结束使用此查询。 在localhost上测试它运行查询

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

如果我按时间减少取出组,但当然我会得到重复的行。 如果我在订单ASC中使用select distinct,则时间会再次上升。

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

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 ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM