【问题标题】:SQL server 2008 - storing and searching URL (web address)SQL server 2008 - 存储和搜索 URL(网址)
【发布时间】: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


【解决方案1】:

1) 如果您使用的是 SQL Server 2005(或 SQL Server 2008 / 2008 R2),您可以在 URL 列上配置全文搜索功能,这样您就可以避免使用 LIKE 运算符作为一个整体(事件 %bbc % 现在将花费更少的时间)。

现在,如果你已经配置了标题全文搜索和完整的URL,你可以使用SQL的contains子句来搜索你要查找的内容。

【讨论】:

    猜你喜欢
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 2011-06-10
    • 2011-09-15
    • 1970-01-01
    • 2012-02-03
    • 2013-03-25
    相关资源
    最近更新 更多