Sql server SQL列搜索问题(SQL Server 2005)
在我的一个表中有一列varchar(70),我在其中存储空间分隔的标记:Sql server SQL列搜索问题(SQL Server 2005),sql-server,tsql,Sql Server,Tsql,在我的一个表中有一列varchar(70),我在其中存储空间分隔的标记: Id Tags 1 Baby Kids Learning Alphabets 2 Kids Baby 3 Comedy Movie Fun 100 Kids Learning Alphabets 500 Kids Baby 我对列执行搜索: 在标签上有婴儿和字母的地方,获取所有ID 我可以在像“%Baby%”这样的标签或像“%Kids%”这样的标签或像“%Alphabets%”这样的标签的位置执行操作
Id Tags
1 Baby Kids Learning Alphabets
2 Kids Baby
3 Comedy Movie Fun
100 Kids Learning Alphabets
500 Kids Baby
我对列执行搜索:
在标签上有婴儿和字母的地方,获取所有ID
我可以在像“%Baby%”这样的标签或像“%Kids%”这样的标签或像“%Alphabets%”这样的标签的位置执行操作
当有大量行时,选择query isslow。但是添加\删除\编辑总是非常快
因此,我添加了另一个名为Tags的表,在该表中,我按字母顺序存储标签,如下所示:
Tag Id
Alphabets 1
Alphabets 100
Baby 1
Baby 2
Baby 500
Comedy 3
Kids 1
这使得搜索速度更快,购买更新\删除\插入
我的设计适合未来的发展吗
如何设计此标记列
谢谢你的阅读
编辑:
*我只想找出相关ID的列表。基本上查找具有给定标记或标记的所有ID。就像这个问题一样,你可以在右边看到“相关问题”。这正是我想要得到的。*你真的需要分析你网站的哪些方面会增长,你的目标是什么。会有很多插页吗?会有很多标签吗?你是否需要回答“有多少问题有‘字母表’的标签?”这个问题?“我讨厌‘这取决于’答案,但这确实取决于你的目标和期望。以下是我的建议: 创建2个新表。只需存储标签的名称
Tag Id
Alphabets 1
Baby 2
Comedy 3
Kids 4
Learning 5
Alphabets 6
第二个将标记链接到第一个表中的条目
main_id tag_id
1 2
1 4
1 5
1 6
100 4
100 5
100 6
然后,您可以简单地使用表之间的联接进行搜索。速度会快得多。确保包括适当的索引。我有所有Q的答案。将有数以百万计的标签。只需考虑它是一个公共分享网站。如果有1000万行,每个行有5个标记,那么这就是50万个标记。所以会有很多标签。我必须选择“给我所有有字母和学习的ID”。听起来标签可能会成为你的瓶颈,所以它们应该很快。出于这个原因,我觉得你最近的做法更好。您还可以考虑在标签表上保留缓存计数,以防您需要回答“这个标签使用了多少次”的问题,这当然是插入/更新/删除的另一个问题。但是如果你希望在每个页面上都显示标签云,那么从长远来看,它可能会带来巨大的收益。我认为这比我的设计没有任何优势。我正在保存一个连接和easy insert\update\delete。因为您询问了有关未来设计的问题-这将是最好的方法。如果你后来决定添加一个子类别并更改其中一个类别名称,这将使你的生活更简单。以“宝贝”为例。如果你将来决定将不同类别的“婴儿”和“蹒跚学步的孩子”,并且可能将所有当前的“婴儿”类别改为“婴儿”,那么你必须更新设计中每一行的“婴儿”字样。对于我的,你只需要更新1个条目的分类表,你就完成了。这也是一个很好的设计,请参阅(搜索多对多)并查看或谷歌搜索数据库规范化Rayman,对于标签,我不打算设置子分类。谢谢你的观点。Upvoting.@Projapati如果您真的要像您所说的那样拥有数百万个标记,那么像这样的规范化将为编写代码付出努力。考虑到在更大的范围内,您不通过保存联接进行优化,而是通过分析查询计划、广泛使用索引和记住唯一索引进行优化,总体而言,这些索引更符合条件并提供更好的性能。