【发布时间】:2011-04-08 07:16:42
【问题描述】:
我正在决定如何在表格中存储 URL(书签)。我有以下要求:
客户必须能够搜索书签的标题。
我决定为此要求使用带有排名选项的 FTS
客户必须能够搜索地址
这是我对如何存储 URL 有疑问的地方。首先,URL 在我的表中必须是唯一的。这可能是一个非常大的表。此表不会有更新或删除。我想到的是这个
ID [int] IDENTITY(1,1) -- identity and foreign key in other table(s)
Title [nvarchar](500) -- title (FTS)
CompleteURL [nvarchar](300), -- Unique index example: http://www.bbc.co.uk
URLPrefix [nvarchar](20), -- example: http://www
URLSufix [nvarchar](280), -- example: bbc.co.uk/something (index)
我意识到我有数据重复,但我对此没有任何问题,因为这里不涉及数据完整性(没有更新或删除)并且性能很重要。我想在插入期间使用 CompleteURL 作为我的 IF EXISTS 列。我不确定这种方法是否会比 URLPrefix 和 URLSufix 上的复合键提供更好的性能并完全失去 CompleteURL?
URLSufix 可以快速查找搜索参数 LIKE 'bbc%'。
但是如果客户确实搜索 LIKE 'www.bbc%' 怎么办?字符串开头的任何通配符 (%bbc%) 都是不可能的,因为我无法扫描整个表。
此外,我决定在另一个表中移动超过 (300) 的 URL,因为超过 99.9% 的 URL 没有那么长,而且我不想达到 900 字节的索引限制。 这是一个好习惯吗?
编辑:
长话短说。您将如何存储此书签
BBC Homepage title
http://www.bbc.co.uk/
如果您希望在搜索参数为 3 种情况之一时返回它:
1. 'homepage'
2. 'bbc.co'
3. 'www.bbc.co'
【问题讨论】:
-
您似乎不清楚用户故事。在开始考虑设计之前,请询问您的客户唯一用例。
-
仅供参考:后缀由两个 effs 拼写。
-
为什么不在网址上也使用 FTS?无论如何,分词器都会忽略标点符号。
标签: sql-server-2008 url search sql-like