Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么WordPress mysql查询的速度要快得多?(又名解释)_Mysql_Wordpress - Fatal编程技术网

为什么WordPress mysql查询的速度要快得多?(又名解释)

为什么WordPress mysql查询的速度要快得多?(又名解释),mysql,wordpress,Mysql,Wordpress,有人能帮我理解为什么第二个查询要快得多吗 这是来自WordPress数据库,其中wp_posts是一个包含列ID、post_title、post_status…的表,wp_postETA是一个包含列ID、post_ID、meta_key、meta_value的表。wp_posts.ID对应于wp_postta.post_ID 我已经看过Explain的输出,但我不清楚。我看到查询的执行顺序略有不同,但我真的不明白为什么它会改变顺序,或者为什么它会更快 我真的很想理解,所以我知道它是否适用于其他查

有人能帮我理解为什么第二个查询要快得多吗

这是来自WordPress数据库,其中wp_posts是一个包含列
ID、post_title、post_status…
的表,wp_postETA是一个包含列
ID、post_ID、meta_key、meta_value的表。wp_posts.ID对应于wp_postta.post_ID

我已经看过Explain的输出,但我不清楚。我看到查询的执行顺序略有不同,但我真的不明白为什么它会改变顺序,或者为什么它会更快

我真的很想理解,所以我知道它是否适用于其他查询

谢谢


查询1::~14秒
查询2::~3.0秒
两个查询之间的区别在于,您已经将'AND wpmX.meta_key'子句移动到了左侧的JOIN ON?如果使用常规联接而不是左联接,这是否会产生相同的差异?这并不重要,但是如果您没有在左连接列中检查非空值,那么您可能会要求不同的内容。查询之间的区别在于您已将'AND wpmX.meta_key'子句移动到左连接列中,对吗?如果使用常规联接而不是左联接,这是否会产生相同的差异?这并不重要,但如果您没有检查左连接列中的非空值,那么您可能会要求不同的内容。
SELECT
    COALESCE( SUM( wpm1.meta_value ), 0  ) as package_sum,
    wpm2.meta_value as prp_id
FROM wp_posts
LEFT JOIN wp_postmeta wpm1 ON wpm1.post_id = wp_posts.ID
LEFT JOIN wp_postmeta wpm2 ON wpm2.post_id = wp_posts.ID
LEFT JOIN wp_postmeta wpm3 ON wpm3.post_id = wp_posts.ID
WHERE post_type='voucher'
AND post_status IN ( 'requested', 'disputed', 'issued', 'visit-required', 'claimed', 'witheld', 'approved', 'paid' )
AND wpm1.meta_key='voucher_value'
AND wpm2.meta_key='prp'
AND wpm3.meta_key='supplier'
AND wpm3.meta_value='955'
GROUP BY wpm2.meta_value

EXPLAIN:
-----------------------
id   select_type     table       type        possible_keys               key         key_len     ref                     rows    filtered    Extra
1    SIMPLE          wpm2        ref         post_id,meta_key            meta_key    767         const                   80212   100.00      Using where; Using temporary; Using filesort
1    SIMPLE          wp_posts    eq_ref      PRIMARY,type_status_date    PRIMARY     8           gigabit.wpm2.post_id    1       100.00      Using where
1    SIMPLE          wpm3        ref         post_id,meta_key            post_id     8           gigabit.wpm2.post_id    50      100.00      Using where
1    SIMPLE          wpm1        ref         post_id,meta_key            post_id     8           gigabit.wpm2.post_id    50      100.00      Using where
SELECT
    COALESCE( SUM( wpm1.meta_value ), 0  ) as package_sum,
    wpm2.meta_value as prp_id
FROM wp_posts
LEFT JOIN wp_postmeta wpm1 ON wpm1.post_id = wp_posts.ID AND wpm1.meta_key='voucher_value'
LEFT JOIN wp_postmeta wpm2 ON wpm2.post_id = wp_posts.ID AND wpm2.meta_key='prp'
LEFT JOIN wp_postmeta wpm3 ON wpm3.post_id = wp_posts.ID AND wpm3.meta_key='supplier'
WHERE post_type='voucher'
AND post_status IN ( 'requested', 'disputed', 'issued', 'visit-required', 'claimed', 'witheld', 'approved', 'paid' )
AND wpm3.meta_value='955'
GROUP BY wpm2.meta_value

EXPLAIN:
-----------------------
id   select_type     table       type        possible_keys               key         key_len     ref                     rows    filtered    Extra
1    SIMPLE          wpm3        ref         post_id,meta_key            meta_key    767         const                   71970   100.00      Using where; Using temporary; Using filesort
1    SIMPLE          wp_posts    eq_ref      PRIMARY,type_status_date    PRIMARY     8           gigabit.wpm3.post_id    1       100.00      Using where
1    SIMPLE          wpm1        ref         post_id,meta_key            post_id     8           gigabit.wpm3.post_id    50      100.00      Using where
1    SIMPLE          wpm2        ref         post_id,meta_key            post_id     8           gigabit.wpm3.post_id    50      100.00      Using where