gpt4 book ai didi

mysql - 为什么限制 0,1 比限制 0、17 慢

转载 作者:行者123 更新时间:2023-12-04 11:39:13 26 4
gpt4 key购买 nike

我正在尝试使用 LIMIT 0,1 分析为什么以下查询会变慢比LIMIT 0,100我已添加 SQL_NO_CACHE用于测试目的。
询问:

 SELECT 
SQL_NO_CACHE SQL_CALC_FOUND_ROWS wp_posts.*,
low_stock_amount_meta.meta_value AS low_stock_amount
FROM
wp_posts
LEFT JOIN wp_wc_product_meta_lookup wc_product_meta_lookup ON wp_posts.ID = wc_product_meta_lookup.product_id
LEFT JOIN wp_postmeta AS low_stock_amount_meta ON wp_posts.ID = low_stock_amount_meta.post_id
AND low_stock_amount_meta.meta_key = '_low_stock_amount'
WHERE
1 = 1
AND wp_posts.post_type IN ('product', 'product_variation')
AND (
(wp_posts.post_status = 'publish')
)
AND wc_product_meta_lookup.stock_quantity IS NOT NULL
AND wc_product_meta_lookup.stock_status IN('instock', 'outofstock')
AND (
(
low_stock_amount_meta.meta_value > ''
AND wc_product_meta_lookup.stock_quantity <= CAST(
low_stock_amount_meta.meta_value AS SIGNED
)
)
OR (
(
low_stock_amount_meta.meta_value IS NULL
OR low_stock_amount_meta.meta_value <= ''
)
AND wc_product_meta_lookup.stock_quantity <= 2
)
)

ORDER BY
wp_posts.ID DESC
LIMIT
0, 1
解释显示完全相同的输出
1   SIMPLE  wp_posts    index   PRIMARY,type_status_date    PRIMARY 8   NULL    27071   Using where
1 SIMPLE low_stock_amount_meta ref post_id,meta_key meta_key 767 const 1 Using where
1 SIMPLE wc_product_meta_lookup eq_ref PRIMARY,stock_status,stock_quantity,product_id PRIMARY 8 woocommerce-admin.wp_posts.ID 1 Using where
平均查询时间为 350 毫秒, LIMIT 0,1平均查询时间为 7ms, LIMIT 0,100LIMIT 0,17 开始,查询性能变得更快
我已经按照此 question 中的建议在 order by 子句中添加了另一列,但这会触发 Using filesort在解释输出中 Order by wp_posts.post_date, wp_posts.ID desc
1   SIMPLE  wp_posts    ALL PRIMARY,type_status_date    NULL    NULL    NULL    27071   Using where; Using filesort
1 SIMPLE low_stock_amount_meta ref post_id,meta_key meta_key 767 const 1 Using where
1 SIMPLE wc_product_meta_lookup eq_ref PRIMARY,stock_status,stock_quantity,product_id PRIMARY 8 woocommerce-admin.wp_posts.ID 1 Using where
有没有办法在不改变索引的情况下解决它,为什么会发生这种情况?
同样有趣的是,从 LIMIT 0,17 开始,查询时间有所改善。 .我不确定为什么 17 在这里是一个神奇的数字。
更新 1:我刚刚尝试添加 FORCE INDEX(PRIMARY)现在 LIMIT 0,100具有与 LIMIT 0,1 相同的性能smh

最佳答案

wp_postmeta有草率的索引;这会减慢涉及它的大多数查询。
O. Jones 和我做了一个 WordPress plugin改进 postmeta 的索引。我们检测各种东西,例如 Barracuda 版本的 InnoDB 存储引擎和其他 MySQL 秘诀的存在,并做正确的事情。
这可能会加快所有三个平均值。很可能会改变EXPLAINs .

关于mysql - 为什么限制 0,1 比限制 0、17 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68414954/

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