我有两张这样的桌子:
企业
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
索引?
Full-text
搜索是使用 MATCH()
AGAINST()
语法执行的,因为您使用的是 WHERE
和运算符 =
意味着您正在搜索确切的字符串,因此复合索引是您的最佳选择:
create index entreprises_idx on Enterprises(FullName, Type);
create index addresses_idx on Addresses(address1, address1, address1, postcode, city);
如果你想运行全文搜索,那么你必须在要运行它的列上有一个全文索引。
简答:综合指数。
长答案:
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
都没有多大用处。