mysql提高like查询速度_提高MySQL LIKE查询的速度?

对于具有自动完成功能的机场输入字段,目前有一个包含机场描述的表,autocomplete_airport:

lang | description (with INDEX) | ...

-----+----------------------------------------------------+----

pt | New York - John F Kennedy (JFK), Estados Unidos | ...

pt | Nova Iorque - John F Kennedy (JFK), Estados Unidos | ...

...

自动完成功能适用于单个单词.因此,当用户输入“yor”时,则显示“new york”(如果在LIMIT中).查询目前的工作方式如下:

SELECT * FROM autocomplete_airport WHERE lang = "pt"

AND (description LIKE "%(yor)%"

OR description LIKE "yor%"

OR description LIKE "% yor%")

ORDER BY description

LIMIT 15

现在我想知道如何加快速度.一个想法是使用表autocomplete_airport和autocomplete_airport_word创建以下数据库结构:

id | lang | description (with INDEX) | ...

-----+------+----------------------------------------------------+----

123 | pt | New York - John F Kennedy (JFK), Estados Unidos | ...

124 | pt | Nova Iorque - John F Kennedy (JFK), Estados Unidos | ...

...

word (with INDEX) | autocomplete_airport_id

------------------+------------------------

New | 123

York | 123

John | 123

F | 123

Kennedy | 123

JFK | 123

...

那么SELECT只需要在字符串的开头搜索:

SELECT DISTINCT autocomplete_airport.*

FROM autocomplete_airport

INNER JOIN autocomplete_airport_word

ON autocomplete_airport.id = autocomplete_airport_word.autocomplete_airport_id

WHERE lang = "pt"

AND word LIKE "yor%"

ORDER BY description

LIMIT 15

那个新结构值得吗?它会真的加快速度吗?有更简单的方法吗?

更新

只是注意到单词表有一个缺陷.结果:搜索“纽约”不会给出任何结果.应该做些什么:

term (with INDEX) | autocomplete_airport_id

------------------------------------------------+------------------------

New York - John F Kennedy (JFK), Estados Unidos | 123

York - John F Kennedy (JFK), Estados Unidos | 123

John F Kennedy (JFK), Estados Unidos | 123

F Kennedy (JFK), Estados Unidos | 123

Kennedy (JFK), Estados Unidos | 123

(JFK), Estados Unidos | 123

Estados Unidos | 123

Unidos | 123

JFK | 123

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值