Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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
Sql server SQL列搜索问题(SQL Server 2005)_Sql Server_Tsql - Fatal编程技术网

Sql server SQL列搜索问题(SQL Server 2005)

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%”这样的标签的位置执行操作

在我的一个表中有一列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%”这样的标签的位置执行操作 当有大量行时,选择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如果您真的要像您所说的那样拥有数百万个标记,那么像这样的规范化将为编写代码付出努力。考虑到在更大的范围内,您不通过保存联接进行优化,而是通过分析查询计划、广泛使用索引和记住唯一索引进行优化,总体而言,这些索引更符合条件并提供更好的性能。