gpt4 book ai didi

mysql - 优化用于标记匹配的 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 01:05:34 28 4
gpt4 key购买 nike

示例数据集:

id | tag
---|------
1 | car
1 | bike
2 | boat
2 | bike
3 | plane
3 | car

idtag 都已编入索引。

我正在尝试获取与标签 [car, bike] 匹配的 ID(标签的数量可能会有所不同)。

这样做的天真查询是:

SELECT id
FROM test
WHERE tag = 'car'
OR tag = 'bike'
GROUP BY id
HAVING COUNT(*) = 2

但是,这样做效率很低,因为有分组依据,而且任何与一个标签匹配的行都会被考虑到分组依据中(而且我有一个很大的容量)。

对于这种情况有没有更高效的查询方式?

我看到的唯一解决方案是有另一个包含类似内容的表:

id | hash
---|------
1 | car,bike
2 | boat,bike
3 | plane,car

但这不是一个容易实现和保持最新的解决方案。

附加信息:

  • 名称匹配必须准确(无全文索引)
  • 标签的数量并不总是2

最佳答案

试试这个:

SELECT id
FROM test
WHERE tag in('car','bike')
GROUP BY id
HAVING COUNT(*) = 2

并在标签列上创建一个非聚集索引

关于mysql - 优化用于标记匹配的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12782813/

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