小编Hoo*_*igi的帖子

在 where 子句中同时使用“包含”和“=”时查询速度很慢

以下查询需要大约 10 秒才能在具有 12k 条记录的表上完成

select top (5) *
from "Physician"
where "id" = 1 or contains("lastName", '"a*"')
Run Code Online (Sandbox Code Playgroud)

但是,如果我将 where 子句更改为

where "id" = 1
Run Code Online (Sandbox Code Playgroud)

或者

where contains("lastName", '"a*"')
Run Code Online (Sandbox Code Playgroud)

它会立即返回。

两列都被索引,lastName 列也被全文索引。

CREATE TABLE Physician
(
   id         int identity    NOT NULL,
   firstName  nvarchar(100)   NOT NULL,
   lastName   nvarchar(100)   NOT NULL
);

ALTER TABLE Physician
  ADD CONSTRAINT Physician_PK
  PRIMARY KEY CLUSTERED (id);

CREATE NONCLUSTERED INDEX Physician_IX2
   ON Physician (firstName ASC);

CREATE NONCLUSTERED INDEX Physician_IX3
   ON Physician (lastName ASC);

CREATE FULLTEXT INDEX
    ON …
Run Code Online (Sandbox Code Playgroud)

sql-server full-text-search sql-server-2008-r2

8
推荐指数
1
解决办法
562
查看次数