我正在使用Intranet帮助台网站,该网站提供了对某些表格的搜索。每个表都具有完全相同的模式,但根据目的略有不同。例如,博客将向用户显示作者姓名,而常见问题和指南部分则不会。表格包含以下列:
id int IDENTITY,
title VARCHAR(255),
body NVARCHAR(MAX),
author VARCHAR(80),
date DATETIME,
lasteditor varchar(80),
lastedited DATETIME,
CONSTRAINT [PK_blog_id] PRIMARY KEY CLUSTERED
([id] ASC)
我希望每个表的结果返回与表的所有相关的排名。
我正在使用Transact SQL(SQL Server 2008),因此全文索引需要使用主键进行操作。到目前为止,我已经提出了两种可能性来解决获取全文索引的唯一键的问题:
每次执行搜索时都会创建一个视图,用于对所有表进行联合,并使用以下内容在View上生成唯一的ID列:
SELECT id,
variety,
1 + (SELECT COUNT(*) FROM tbl WHERE t.id < id) as num
FROM tbl
将所有表合并到一个大表中,并附加一个表示该类型的额外列(即“blog”,“faq”,“guide”等)。使用bigtable的主键作为全文索引的键,并使用额外的WHERE子句获取我想要的“表”。
哪一个被认为是更好的练习,还是表现更好?每当有人执行全局站点搜索时,创建视图并为视图生成“自动增量”似乎有点慢。也许有更简单的方法为视图生成唯一的id列?