假设我们有一个包含 1200 万个姓名和地址的数据库,需要使用全文进行搜索,但每一行也包含一个整数值,比方说COMPANYID
。该表在这 1200 万行中包含大约 250 个不同的 COMPANYID。
在定义全文索引时,是否有可能COMPANY
在树中为每个索引提供自己的“分支”?
假设我们有一个包含 1200 万个姓名和地址的数据库,需要使用全文进行搜索,但每一行也包含一个整数值,比方说COMPANYID
。该表在这 1200 万行中包含大约 250 个不同的 COMPANYID。
在定义全文索引时,是否有可能COMPANY
在树中为每个索引提供自己的“分支”?
否是简短的回答,你并不真的需要这个。全文索引是倒排索引,因此它们通过创建全文索引时必须指定的唯一 doc_id 存储拆分词。这必须是一个“唯一的、单键的、不可为空的列”,理想情况下是一个整数。本质上是外键的东西并不明确,并且没有简单的方法可以在此基础上对它们进行分区。
你可以用每个公司一个表和每个表的全文索引来欺骗这样的东西。您需要在前面放置某种代码逻辑来确定要插入到/从中获取的表。这将是一个相当令人头疼的管理,几乎肯定不值得。
如果您有一些大容量(例如,更像是 230 亿条记录),那么您可以考虑分片解决方案,例如,每个公司的 Azure VM 之类的东西,在他们面前有一个应用程序,以确定要连接到哪台机器。但显然你也不需要那个。
SQL 2008 也对全文进行了许多改进,现在更多地集成到数据库引擎中。一种情况是您针对普通列指定 WHERE 子句并使用全文函数,称为“混合查询”并在此处讨论。尽管信息是针对 SQL 2008 的,但它仍然是一篇很棒的文章。
如果您通常关心性能和计划,为什么不启动一些测试数据,引入一些偏差并进行尝试。我在几分钟内编写了约 200 万行的脚本: