【问题标题】:SQL Fulltext search on multiple tables with same schema对具有相同架构的多个表进行 SQL 全文搜索
【发布时间】: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),所以全文索引需要一个主键才能操作。到目前为止,我已经提出了两种可能性来解决获取全文索引的唯一键的问题:

  1. 每次执行联合所有表的搜索时创建一个视图,并使用以下方式在视图上生成一个唯一 ID 列:

        SELECT id,
        variety,
        1 + (SELECT COUNT(*) FROM tbl WHERE t.id < id) as num
        FROM tbl
    
  2. 将所有表合并到一个大表中,并附加一个额外的列来表示类型(即“博客”、“常见问题解答”、“指南”等)。使用 bigtable 的主键作为全文索引的键,并使用额外的 WHERE 子句获取我想要的“表”。

哪一个被认为是更好的做法,或者表现更好?每次有人执行全局站点搜索时,创建视图并为视图生成“自动增量”似乎有点慢。也许有一种更简单的方法可以为视图生成唯一的 id 列?

【问题讨论】:

    标签: tsql full-text-search


    【解决方案1】:

    我认为您回答了自己的问题 1) 似乎是个坏主意,除非您有令人信服的理由让 4 个表基本相同。

    使用 2,以后添加新文本对象时会很高兴

    “例如,博客将向用户显示作者姓名,而常见问题解答和指南部分则不会。表格具有以下列”

    这都是业务逻辑。不要在数据库层做出这个决定。根据类型字段做出决定。

    【讨论】:

    • 是的,我在发布后的第二天就选择了选项 #2。不过我忘记更新了。感谢您的确认。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    相关资源
    最近更新 更多