Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 全文搜索会考虑索引吗?_Sql Server_Indexing_Full Text Search - Fatal编程技术网

Sql server 全文搜索会考虑索引吗?

Sql server 全文搜索会考虑索引吗?,sql-server,indexing,full-text-search,Sql Server,Indexing,Full Text Search,好的,我在我的JobsToDo表上创建了一个全文搜索索引,但我关心的是,这是否会使表上的其他索引变得无用。我在这个表的CreatedDate字段上有一个普通的非聚集索引。因此,当我运行全文搜索时,它会返回结果,然后通过CreatedDate>=GETDATE()-7过滤全文搜索,以获得最近7天的工作时间。现在使用的是我的普通索引(在CreatedDate上)还是忽略此索引并纯粹搜索全文索引,然后再次搜索整个表上的日期条件?我的查询如下所示: // First create an index CO

好的,我在我的JobsToDo表上创建了一个全文搜索索引,但我关心的是,这是否会使表上的其他索引变得无用。我在这个表的CreatedDate字段上有一个普通的非聚集索引。因此,当我运行全文搜索时,它会返回结果,然后通过CreatedDate>=GETDATE()-7过滤全文搜索,以获得最近7天的工作时间。现在使用的是我的普通索引(在CreatedDate上)还是忽略此索引并纯粹搜索全文索引,然后再次搜索整个表上的日期条件?我的查询如下所示:

// First create an index
CONSTRAINT [IX_JobsToDo] UNIQUE NONCLUSTERED 
(
    [CreateDate]
)

// Now run query
SELECT                      JobId,
                            Title,
                            FROM JobsToDO
                            FREETEXTTABLE (JobsToDo, (Title, [Description]), 'somestring')
                                AND CreatedDate >= GETDATE() - 7;

总结,这个查询是否使用我在CealDeDATE上创建的索引?

< P>是的,查询优化器将考虑使用FT和非FT索引的混合。有关更多详细信息,请参阅本白皮书


顺便说一句,您的CreateDate非聚集索引仍受其他索引使用良好实践的约束。在您的情况下,如果最近7天的记录数足够大,查询优化可能会落在标题上,因为CreateDate不包括标题(假设JobId是聚集索引键的一部分,否则JobId也需要覆盖)。另一方面,如果FT搜索条件具有很强的选择性,则可能会忽略CreatedDate索引,聚集索引将用于探测FT索引找到的候选项并验证CreatedDate条件。

这一结果完全取决于您使用的SQL Server版本。在2008年之前,当您同时使用全文和非全文谓词时,SQL Server对查询的每个部分都有单独的查询计划。自2008年以来,所有的工作现在都在SQLServer内部完成,它提供了一个单一的查询计划

一句话:如果全文对您很重要,请使用SQL Server 2008。这样做的另一个原因是全文索引现在位于数据库内部,并且像所有其他数据库对象一样进行管理,这与早期版本不同,早期版本将全文索引存储在数据库外部的文件系统中。(2005年试图通过同时备份和恢复它们来提供帮助,但与当前的机制相比,这是一个黑客行为)