MySQL 中的全文索引或复合索引?

问题描述 投票:0回答:2

我有两张这样的桌子:

企业

FullName      Type
ABC aze        1
DEF rty        2 

地址

Address1          Address2 Address3    Postcode    City
165 Ward Street                        E1 7AW      London
167 Ward Street                        E1 7AW      London
10 Auckland Street                     N1 0AA      London

我会做很多查询来搜索地址是否存在和/或企业是否存在

=
.

企业查询,会在

VARCHAR
SMALLINT
(类型栏)栏位:
WHERE Type = 1 AND FullName = '...'

对于地址的查询,它将在

VARCHAR
字段上:
WHERE address1 = '...' AND address2 = '...' AND address3 = '...' AND postcode = '...' AND city = '...'

为了获得最佳响应时间,我应该使用复合索引还是

FULLTEXT
索引?

mysql indexing full-text-search query-optimization
2个回答
0
投票

Full-text
搜索是使用
MATCH()
AGAINST()
语法执行的,因为您使用的是
WHERE
和运算符
=
意味着您正在搜索确切的字符串,因此复合索引是您的最佳选择:

create index entreprises_idx on Enterprises(FullName, Type);

create index addresses_idx on Addresses(address1, address1, address1, postcode, city);

如果你想运行全文搜索,那么你必须在要运行它的列上有一个全文索引。


0
投票

简答:综合指数。

长答案:

WHERE Type = 1 AND FullName = '...'

-->

INDEX(Type, FullName)   -- (either order is ok)


WHERE address1 = '...' AND address2 = '...' AND
      address3 = '...' AND postcode = '...' AND city = '...'

-->

INDEX(address1, address2, address3, postcode, city)  -- (any order)

上述索引将比 FULLTEXT 更快,因为它是完美匹配(所有

=
,无范围等)。

你不需要担心“模糊”匹配吗?如果这样做,

INDEX
FULLTEXT
都没有多大用处。

© www.soinside.com 2019 - 2024. All rights reserved.