我正面临着如何在表格中存储URL(书签)的决定。我有以下要求:
客户必须能够搜索书签的标题。
我决定使用带有此要求的排名选项的FTS
客户必须能够搜索地址
以下是我对如何存储网址的疑问。首先,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'
答案 0 :(得分:1)
1)如果您使用的是SQL Server 2005(或SQL Server 2008/2008 R2),则可以在URL列上配置全文搜索功能,这样就可以避免使用LIKE运算符(事件%bbc) %现在将花费更少的时间)。
现在,如果您已在标题上配置了全文搜索并完成了URL,则可以使用SQL的contains子句来搜索您要查找的内容。