首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何优化这个MySQL SQL查询?

如何优化这个MySQL SQL查询?
EN

Stack Overflow用户
提问于 2015-01-18 23:39:18
回答 2查看 54关注 0票数 0

我正在使用join + union + group by查询,并且我开发了一个如下所述的查询:

代码语言:javascript
复制
SELECT *
FROM (
        (SELECT countries_listing.id,
                countries_listing.country,
                1 AS is_country
         FROM countries_listing
         LEFT JOIN product_prices ON (product_prices.country_id = countries_listing.id)
         WHERE countries_listing.status = 'Yes'
           AND product_prices.product_id = '3521')
      UNION
        (SELECT countries_listing.id,
                countries_listing.country,
                0 AS is_country
         FROM countries_listing
         WHERE countries_listing.id NOT IN
             (SELECT country_id
              FROM product_prices
              WHERE product_id='3521')
           AND countries_listing.status='Yes')) AS partss
GROUP BY id
ORDER BY country

我刚刚意识到这个查询花了很多时间来加载结果,几乎需要8秒。

我想知道是否有可能将这个查询优化为最快的查询?

EN

回答 2

Stack Overflow用户

发布于 2015-01-18 23:46:28

如果我没理解错的话,您只是想为国家添加一个标志,说明给定产品是否有价格。我认为您可以使用exists子句来获得您想要的内容:

代码语言:javascript
复制
SELECT cl.id, cl.country,
       (exists (SELECT 1
                FROM product_prices pp
                WHERE pp.country_id = cl.id AND
                      pp.product_id = '3521'
               )
       ) as is_country
FROM countries_listing cl
WHERE cl.status = 'Yes'
ORDER BY country;

为了提高性能,您需要两个索引:countries_listing(status, country)和product_prices(country_id,product_id)`。

票数 3
EN

Stack Overflow用户

发布于 2015-01-18 23:42:12

根据执行频率的不同,准备好的语句可能会有所帮助。有关详细信息,请参阅PDO

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28011506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档