gpt4 book ai didi

mysql - 估计 MySQL "SELECT WHERE EXISTS"查询的结果数?

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:22 25 4
gpt4 key购买 nike

我有一个简单的“事物”数据库,可以有零个或多个“类别”或“标签”。我已经编写了一个存储过程,它将获取给定类别中的前 N ​​个对象,并且性能非常好。看起来有点像

SELECT * FROM things
WHERE things.datestamp > @start AND things.datestamp < @end
AND EXISTS (
SELECT 1 from thing_tags
WHERE things.id = thing_tags.thing_id
AND thing_tags.tag = @searchTag
)
LIMIT ?

如果有几十万个“东西”,每个都有大约 0-5 个标签,性能还不错——我最多可以在几十毫秒内获得前几百个匹配项。

但是,如果我想知道总共有多少场比赛,这需要很长时间——至少很多秒。有没有比 SELECT COUNT(id) FROM ....(上面查询的其余部分) 更聪明的方法? id 字段已编入索引,根据 this suggestion ,但索引并没有多大帮助,因为它必须检查 things 中每一行的 tags 表。

我正在考虑实现分页,我知道 LIMIT ?,?(或 LIMIT ?OFFSET ?)会使它变得容易,但它会很好至少向用户展示预期的“匹配”总数的近似值。

最佳答案

我认为下面应该给出计数

SELECT count(id) FROM things, things_tags
WHERE things.datestamp > @start AND things.datestamp < @end
AND things.id=thing_tags.thing_id
AND things_tags.tag = @searchTag
GROUP BY things.id

在 (datestamp,id) 的事物和 (id,tag) 的 thing_tags 上有一个索引。我在这里假设每个事物的标签都是不同的。

关于mysql - 估计 MySQL "SELECT WHERE EXISTS"查询的结果数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18252021/

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