当前位置: 首页 > 面试题库 >

为什么在您进行OR时,SQL FullText查询的速度变慢?

亢雅懿
2023-03-14
问题内容

在SQL
Server(2008)中,我在两列上都有一个FullText索引,将它们称为Table1.FirstNamesTable2.LastNames。对一些查询进行概要分析后,我得出了以下结果:

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(FirstNames, 'Bob') OR CONTAINS(LastNames, 'Bob')

=> 31197毫秒

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE (FirstNames LIKE '%Bob%') OR CONTAINS(LastNames, 'Bob')

=> 1941毫秒

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(FirstNames, 'Bob') OR LastNames LIKE '%Bob%'

=> 3201毫秒

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(FirstNames, 'Bob')

=> 565毫秒

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE FirstNames LIKE '%Bob%'

=> 670毫秒

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(LastNames, 'Bob')

=> 17毫秒

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE LastNames LIKE '%Bob%'

=> 3毫秒

即使我重建FullText索引,此行为仍然存在。

与对特定语言的大量数据进行LIKE查询相比,FullText通常要快得多,但是当我对两个FullText进行“或”运算时,为什么查询速度会降低一个数量级?


问题答案:

更改为使用ContainsTable帮助吗?

而同样的回答者(乔·斯特凡内利)管理带来改变有类似的改进FREETEXT谓词联合ORFREETEXTTABLE



 类似资料:
  • 本文向大家介绍为什么索引能提高查询速度?相关面试题,主要包含被问及为什么索引能提高查询速度?时的应答技巧和注意事项,需要的朋友参考一下 以下内容整理自: 地址: https://juejin.im/post/5b55b842f265da0f9e589e79 作者 :Java3y 先从 MySQL 的基本存储结构说起 MySQL的基本存储结构是页(记录都存在页里边): 各个数据页可以组成一个双向链表

  • 问题内容: 我试图弄清楚为什么我的查询之一变慢以及如何解决它,但是我对结果有些困惑。 我有一个约80列和775179行的表,并且正在执行以下请求: 在4.5秒内返回38行 删除时,我得到了很好的改进: 0.30秒内38行 但是,如果在不触摸的情况下删除,我会得到更好的结果: 0.10s(??)中的38行 为什么我的LIMIT这么饿? 继续前进 在尝试发送答案之前,我尝试了一些尝试,并注意到我有一个

  • 问题内容: 我有一个处理DataFrame的函数,主要用于将数据处理到存储桶中,使用会在特定列中创建功能的二进制矩阵。 为了避免立即使用此函数处理所有数据(该数据将耗尽内存并导致iPython崩溃),我使用以下方法将大型DataFrame分为多个块: 会自动创建一个基于内容的新栏目和这些都有可能为每个不同df在df_list。 加工后,我串接DataFrames回到一起使用: 第一块的处理时间是完

  • 问题内容: 有关MySQL的COUNT()聚合函数的问题一直不时出现。我想对为什么它按原样工作有一些解释。 当我开始使用MySQL时,我很快了解到,如果条件最后还包含OR NULL,则它的COUNT(condition)似乎只能正常工作。在更复杂的COUNT条件的情况下,找出确切的位置是一个经验过程。在MSSQL中,不需要此OR NULL即可获得正确的结果,因此我想了解其解释。所以,这是一个例子。

  • 早上好,我有两张表,ANALISI有1462632记录,帕齐恩特有1408146记录,这个简单的计数使用帕津特的索引之一需要大约30秒才能回馈大约65000条记录 我还尝试在分析中添加索引。ID_PAZIENTE,但没有好的结果。是否有提高绩效的方法? 这是在我看来没问题的腐蚀性解释

  • 本文向大家介绍SQL Server 使用join all优化 or 查询速度,包括了SQL Server 使用join all优化 or 查询速度的使用技巧和注意事项,需要的朋友参考一下 比如:,master,test, 表示 该用户为 test 的下级代码,test登录后可以看到 test名下的业务和所有下级代理的业务。相关表的结构如下: 优化前的SQL语句如下: 不使用 or 单独查询时,都不