gpt4 book ai didi

mysql - 优化选择中的选择

转载 作者:行者123 更新时间:2023-11-29 08:16:41 24 4
gpt4 key购买 nike

SELECT ID, title, image, FROM items WHERE  ID IN (
SELECT tags_relationships.post_id
FROM tags_relationships
INNER JOIN tags
ON tags.tag_id = tags_relationships.tag_id
WHERE tags.name = 'white'
)

AND
ID IN (
SELECT tags_relationships.post_id
FROM tags_relationships
INNER JOIN tags
ON tags.tag_id = tags_relationships.tag_id
WHERE tags.name = 'bike'
)

AND status = 'publish' ORDER BY ID DESC LIMIT 1860,20

嗨,又来了。当有人搜索“白色自行车”时,我有这个查询,结果效果很好,转储了所有带有白色和自行车标签的元素。此查询的问题是花费太多时间 >2 秒,因为 items 表有大约 200k 行,tags_relationships 大约有 150 万行。我尝试过处理索引,但我知道应该对我的查询采用类似的方法,从而加快询问速度。

最佳答案

等价查询* 如果tags_relationships 具有唯一的(post_id, tag_id) 对

SELECT items.* FROM items 
INNER JOIN tags_relationships r1 ON (r1.post_id = items.id)
INNER JOIN tags_relationships r2 ON (r2.post_id = items.id)
INNER JOIN tags t1 ON (t1.tag_id = r1.tag_id)
INNER JOIN tags t2 ON (t2.tag_id = r2.tag_id)
WHERE
t1.name = 'white'
AND t2.name = 'bike'
AND items.status = 'publish'
ORDER BY ID DESC

但是,它是完全等效的,包括执行计划,因为在唯一连接字段的情况下,“IN(子查询)”构造本身就是内部连接。Tags_relationships 的主键或唯一索引应该很复杂(post_id、tag_id)。

关于mysql - 优化选择中的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20477391/

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