回答

收藏

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

技术问答 技术问答 180 人阅读 | 0 人回复 | 2023-09-14

在SQL9 K8 s2 H* v& [% I. p
Server(2008)中,我在两列上都有一个FullText索引,将它们称为Table1.FirstNames和Table2.LastNames。对一些查询进行概要分析后,我得出了以下结果:7 W3 M8 C8 E6 G$ E5 {) o7 w
SELECT *
2 p% j/ k; R' f4 @FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
, ~9 R* E% X8 @, B! J9 \WHERE CONTAINS(FirstNames, 'Bob') OR CONTAINS(LastNames, 'Bob')- _# l2 C2 c6 i) I% G
=> 31197毫秒
; M& d* o8 U6 A5 m* {5 MSELECT *- C0 }: K1 [, r9 F/ \
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)% K% I& n4 y$ N% W5 D* \6 Z
WHERE (FirstNames LIKE '%Bob%') OR CONTAINS(LastNames, 'Bob')$ e4 j  B1 @' O4 |& X
=> 1941毫秒) P" a  U- F& P0 N( v
SELECT *. M# N1 F, r, R+ V- t! o
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)# K3 u& x$ o# O, M. O' ~! |: P
WHERE CONTAINS(FirstNames, 'Bob') OR LastNames LIKE '%Bob%'; a: h) [7 w; N0 f3 A, P8 z0 v0 w
=> 3201毫秒8 j! P3 g+ t7 @
SELECT *8 V9 }9 r9 n. D7 ?3 ]
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)1 G9 t" E& G  g3 B1 M1 t4 n
WHERE CONTAINS(FirstNames, 'Bob')
& J7 m0 J: Z7 e6 `# [1 S# x1 o=> 565毫秒
# [# l/ R# J$ R+ MSELECT *
9 N& g3 [" [+ d3 Q7 ^2 s0 j$ |0 SFROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
* h4 x* n$ z2 \# w- yWHERE FirstNames LIKE '%Bob%'# R* O+ R1 g* T, ?% X
=> 670毫秒" Q/ A/ @: l% F2 H- s
SELECT *
. ^) h- q3 B+ N2 BFROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
. I. o& Q$ b' ^7 [7 F( PWHERE CONTAINS(LastNames, 'Bob')
* M+ q5 }- X7 [3 W0 u4 A) [=> 17毫秒
) R; t$ p% }; ?% M8 u% \SELECT *
) l7 e, h6 [, Z& C0 ~8 }6 l' FFROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
# C: N$ i4 v$ j* B/ W* ~1 gWHERE LastNames LIKE '%Bob%'
" @  p6 q" y& l0 J=> 3毫秒  U$ c, j" J# q
即使我重建FullText索引,此行为仍然存在。
1 C% m: c# o  b! e/ q与对特定语言的大量数据进行LIKE查询相比,FullText通常要快得多,但是当我对两个FullText进行“或”运算时,为什么查询速度会降低一个数量级?4 K, E1 d: t% M7 ~
                ; M" M+ g8 S1 `  ?! v5 T$ h
解决方案:) p( ^6 J4 F& q2 h. `- I
               
! _/ K) u: H' p7 M6 f1 e3 a
% j) `; C/ Y. ]  u- |- |" N$ Q# I! k. ^9 E+ O! W( R' i
                更改为使用ContainsTable帮助吗?
- ^* h9 h6 X9 R/ t0 f- u7 `2 C而同样的回答者(乔·斯特凡内利)管理带来改变有类似的改进FREETEXT谓词联合OR到FREETEXTTABLE
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则