【问题标题】:SQL Server: one table fulltext index vs multiple table fulltext indexSQL Server:一表全文索引与多表全文索引
【发布时间】:2016-02-09 10:41:20
【问题描述】:

我有一个搜索程序,它必须在五个表中搜索相同的字符串。我想知道哪个在读取性能方面更好?

  • 要将所有表合并到一个表中,然后在其上添加全文索引
  • 在所有这些表中创建全文索引并对所有表发出查询,然后合并结果

【问题讨论】:

  • 5张桌子有多大?请提供表格架构!!全文索引用于搜索大字符串和文档!
  • 我有 5 个表,每个表包含大约 500k 行。在这种情况下,我想知道哪个在查询性能方面更好。将所有这些表合并到一个表中并创建一个全文来查询这些数据?还是在搜索数据时创建全文索引并查询这些索引?也许我需要测试每种方法

标签: sql-server tsql full-text-indexing database-indexes


【解决方案1】:

我认为在处理性能时需要考虑的一点是,读取数据几乎总是比读取数据、移动数据然后再次读取而不是只读取一次更快。

因此,从您的问题来看,如果您将所有表组合成一个临时表或表变量,这肯定会很慢,因为它必须查询所有数据并移动它(取决于您正在处理的数据量)这可能会或可能不会有太大的不同)。与您的表结构一样,只有当同一字符串在整个表中多次出现时,对字符串的索引才会真正变得有效。

即如果您搜索月份(1 月、2 月、3 月等),则索引会很棒,因为它只能是 12 个选项中的 1 个,并且重复值的次数越多/可供选择的选项就越少索引越好。如果您正在搜索用户输入的值(“我正在写我的人生故事......”)并且您正在搜索该字符串中的一个单词,那么索引可能没有任何区别。

因此,假设您的查询正在搜索,在我的示例月份中,您可以执行以下操作:

SELECT value
FROM (
      SELECT value FROM table1
      UNION
      SELECT value FROM table2
      UNION
      SELECT value FROM table3
      UNION
      SELECT value FROM table4
      UNION
      SELECT value FROM table5
) t
WHERE t.value = 'Jan'

这会将您的结果合并到一个结果集中,而无需移动数据。同样,解释器将能够找到使用每个表上提供的索引来查询每个表的最有效方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 2011-10-13
    • 1970-01-01
    相关资源
    最近更新 更多