【问题标题】:mysql query optimization within the same tablemysql同表查询优化
【发布时间】:2020-03-10 09:30:44
【问题描述】:

以下查询在查询监视器下作为慢查询返回。大约需要 0.4 秒。有什么办法可以提高它的查询速度?

在同一张表(wp_postmeta)下查询,取2组meta_key和meta_value为其条件

SELECT p.post_id as id
FROM `wp_postmeta`as p, `wp_postmeta`as b
WHERE p.post_id = b.post_id
AND (b.meta_key = 'gift_price' and b.meta_value != '')
AND (p.meta_key = '_stock_status' and p.meta_value = 'instock') 

我尝试过使用gift_price 的meta_value > 1,但它实际上更慢了。

【问题讨论】:

    标签: mysql database optimization


    【解决方案1】:

    WP 中的“元”表具有低效的模式规范。推荐:http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta

    【讨论】:

      【解决方案2】:

      索引 wp_postmeta 表

      ALTER TABLE `wp_postmeta` 
         ADD INDEX `IndexName` (`post_id` ASC, `meta_key` ASC, `meta_value` ASC);
      

      使用 EXPLAIN 并检查索引是否工作

      EXPLAIN SELECT p.post_id as id
      FROM `wp_postmeta`as p, `wp_postmeta`as b
      WHERE p.post_id = b.post_id
      AND (b.meta_key = 'gift_price' and b.meta_value != '')
      AND (p.meta_key = '_stock_status' and p.meta_value = 'instock') 
      

      【讨论】:

      • meta_value 可能是LONGTEXT,不能在索引中。
      猜你喜欢
      • 2013-06-02
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多