MySQL中的全文索引还是复合索引?

yftpprvb  于 2023-04-28  发布在  Mysql
关注(0)|答案(2)|浏览(145)

我有两张这样的table:

企业

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

我会做很多查询来搜索地址是否存在和/或企业是否存在=
对于企业的查询,它将在VARCHARSMALLINT(类型列)字段上:WHERE Type = 1 AND FullName = '...'
对于地址的查询,它将在VARCHAR字段上:WHERE address1 = '...' AND address2 = '...' AND address3 = '...' AND postcode = '...' AND city = '...'
要获得最佳响应时间,应该使用复合索引还是FULLTEXT索引?

egdjgwm8

egdjgwm81#

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

create index entreprises_idx on Enterprises(FullName, Type);

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

如果要运行全文搜索,则必须在要运行的列上设置全文索引。

js5cn81o

js5cn81o2#

简短回答:综合指数
长回答:

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快,因为它是一个完美的匹配(所有=,没有范围等)。
你不需要担心“模糊”匹配吗?如果这样做,INDEXFULLTEXT都没有多大用处。

相关问题