我知道可以用LIKE
代替CONTAINS
,但是CONTAINS
相对于LIKE
来说要快得多。在这里,下面的查询不返回任何结果。为什么?
查询:
SELECT CustomerName FROM members WHERE CONTAINS(Country, 'Mexico');
数据库:
发布于 2015-04-06 23:01:08
MySQL解决方案
select customername
from members
where match(country) against ('Mexico')
MS Server解决方案
全文索引不一定总是在创建后填充。使用以下代码确保索引更新:
ALTER FULLTEXT INDEX ON members SET CHANGE_TRACKING AUTO;
更多信息:https://msdn.microsoft.com/en-us/library/ms142575.aspx
完整示例(包括索引创建的更改跟踪选项,而不是后面的ALTER语句):
use StackOverflow
go
create table myTable
(
id bigint not null identity(1,1)
constraint myTable_pk primary key clustered
, name nvarchar(100)
);
create fulltext catalog StackOverflow_Catalog;
create fulltext index
on myTable(name)
key index myTable_pk
on StackOverflow_Catalog
with change_tracking auto;
insert myTable
select 'Mexico'
union select 'London';
select *
from myTable
where contains(name,'Mexico');
发布于 2015-04-06 22:51:29
您试过在中使用吗?如果它在您的情况下有效,它可能会更快。
SELECT CustomerName
FROM members
WHERE Country IN ('Mexico')
但在您的例子中,您可能会将%放在case中,实际上比contain更快,所以只需使用下面的
SELECT CustomerName
FROM members
WHERE CONTAINS(Country, '"*Mexico"');
发布于 2015-04-06 22:52:07
尝尝这个
如果列国家上有全文搜索索引.
SELECT CustomerName FROM members
WHERE CONTAINS(Country, 'Mexico');
否则就这么做
SELECT CustomerName FROM members
WHERE Country LIKE N'%Mexico%';
有一个unicode字符é
,您需要在字符串前面加上N
。
https://stackoverflow.com/questions/29480937
复制相似问题