【发布时间】:2012-08-14 23:41:31
【问题描述】:
我正在开发一个提供对某些表的搜索的 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),所以全文索引需要一个主键才能操作。到目前为止,我已经提出了两种可能性来解决获取全文索引的唯一键的问题:
-
每次执行联合所有表的搜索时创建一个视图,并使用以下方式在视图上生成一个唯一 ID 列:
SELECT id, variety, 1 + (SELECT COUNT(*) FROM tbl WHERE t.id < id) as num FROM tbl 将所有表合并到一个大表中,并附加一个额外的列来表示类型(即“博客”、“常见问题解答”、“指南”等)。使用 bigtable 的主键作为全文索引的键,并使用额外的 WHERE 子句获取我想要的“表”。
哪一个被认为是更好的做法,或者表现更好?每次有人执行全局站点搜索时,创建视图并为视图生成“自动增量”似乎有点慢。也许有一种更简单的方法可以为视图生成唯一的 id 列?
【问题讨论】:
标签: tsql full-text-search