MYSQL数据库建立like搜索的索引

SELECT `Id`, `company`, `address`, `industry` FROM `TableQ` WHERE (`address` LIKE '%北京%') ORDER BY `Id` ASC LIMIT 0, 10
SELECT `Id`, `company`, `address`, `industry` FROM `TableQ` WHERE (`industry` LIKE '%教育%') ORDER BY `Id` ASC LIMIT 0, 10
SELECT `Id`, `company`, `address`, `industry` FROM `TableQ` WHERE (`company` LIKE '%新东方%') ORDER BY `Id` ASC LIMIT 0, 10
SELECT `Id`, `company`, `address`, `industry` FROM `TableQ` WHERE (`company` LIKE '%新东方%') AND (`industry` LIKE '%教育%') ORDER BY `Id` ASC LIMIT 0, 10
SELECT `Id`, `company`, `address`, `industry` FROM `TableQ` WHERE (`address` LIKE '%北京%') AND (`industry` LIKE '%教育%') ORDER BY `Id` ASC LIMIT 0, 10
SELECT `Id`, `company`, `address`, `industry` FROM `TableQ` WHERE (`address` LIKE '%北京%') AND (`address` LIKE '%朝阳区%') ORDER BY `Id` ASC LIMIT 0, 10

MYSQL数据库,经常需要对company, address, industry 三个字段进行单列搜索,或对company, industry,或对address, industry 两个字段进行组合搜索,搜索语句同上。

因为都是带LIKE的搜索,所以,以上5种情况,是不是需要建立5个索引呢?

创建5种索引的语句咋写才可以保证每种搜索的速度最快呢?

补充:company, address, industry三个字段里面的数据都是北京 朝阳区 金兴路这样的数据,数据之间会有空格,但是搜索关键词都是北京上海金兴路或在同一字段内的多关键词组合,比如WHERE (address LIKE '%北京%') AND (address LIKE '%朝阳区%')

%xx%全匹配查找不走索引的,需要用到全文索引。参考这个:

like前缀匹配才会走索引,你这种需求类似分词搜索了,预处理提取词语或者使用elasticsearch这种第三方组件

mysql哪个版本的、
如果是mysql5.7及以上版本支持json数据类型
如果数据格式一致可以考虑将这三列改造成json,数组或者键值对都可以、
并且5.7及以上版本支持虚拟列、 可以添加索引、
可以参考以下文章

索引可以提升查询效率,但是过多的索引会降低数据库insert、update的写入效率。所以一般单表最好索引控制在6个以内。

可以建一个联合索引 index(industry,address,company)和 两个普通索引index(address)、index(company)。利用联合索引的最左匹配原则(最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like)就会停止匹配。)可以让上述提到的所有查询需求都能使用到索引。

同时:mysql查询优化器会判断纠正这条sql语句该以什么样的顺序执行效率最高,最后才生成真正的执行计划。所以sql中条件中字段顺序可以与联合索引中的顺序存异。

最后:like 只有 %不在左侧才能使用到索引!!!