gpt4 book ai didi

sql-server - 如果基础表已经被索引,为什么我们需要查看全文索引

转载 作者:行者123 更新时间:2023-12-02 03:00:25 26 4
gpt4 key购买 nike

假设我们有一个 EmployeesNote 上具有全文索引的表 field 。
我们可以使用这样的查询来搜索该表:SELECT ID FROM Employees WHERE CONTAINS(Note, 'scout')
但是,如果我们创建一个 EmployeesViewSELECT ID, Note FROM Employees 这样简单的东西,我们无法使用 SELECT ID FROM EmployeesView WHERE CONTAINS(Note, 'scout') 查询该 View

该查询将引发以下错误:

Cannot use a CONTAINS or FREETEXT predicate on table or indexed view 'EmployeesView' because it is not full-text indexed.



我想了解为什么 View 不能像其他常规索引那样针对其基础表运行 FTS?

注意#1 这个问题不是关于如何在 View 上创建全文索引,因为这已经是 answered。 .这个问题是为了理解为什么我们必须这样做。

注意#2 我们的数据库比提供的示例更复杂。我们有许多使用同一个全文索引表的 View ,有些可以被索引,而有些则不能,因为模式绑定(bind)限制。我还认为,如果每个 View 都相同,则向每个 View 添加 FTI 有点奇怪(并且会浪费大量磁盘空间)。

最佳答案

这并不是我自己问题的真正答案(我不会接受),但对于任何正在寻找一种变通解决方案的人来说,该解决方案允许您在 View 上使用全文搜索而不在其上创建 FTI,您可以通过在表和 View 之间使用 INNER JOIN:

SELECT * FROM EmployeesView INNER JOIN Employees ON EmployeesView.ID = Employees.ID
WHERE CONTAINS(Employees.Note, 'scout')

或使用 WHERE IN条款:
SELECT * FROM EmployeesView
WHERE ID IN (SELECT ID FROM Employees WHERE CONTAINS(Note, 'scout'))

关于sql-server - 如果基础表已经被索引,为什么我们需要查看全文索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46452580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com