繁体   English   中英

有一种方法来优化这个mysql查询?

[英]there is a way to optimize this mysql query?

SELECT T1.name AS hotel, 
       T2.name AS city 
  FROM (SELECT * 
          FROM hotel 
         WHERE name LIKE '$term1%') T1,
       (SELECT * 
          FROM city 
         WHERE name LIKE '$term2%') T2
 WHERE T1.city_id = T2.id

T1有150000,T2有15000.(静态表!)我有这个表'name'的索引。

有一种方法来优化这个mysql查询? 我也想做 - > LIKE'%term1%',但它非常慢。

第一步是使用ANSI-92 JOIN语法重写查询:

SELECT h.name AS hotel,
       c.name AS city
  FROM HOTEL h
  JOIN CITY c ON c.id = h.city_id
 WHERE h.name LIKE '$term1%'
   AND c.name LIKE '$term2%'

之后,看看索引:

  • HOTEL.name
  • HOTEL.city_id
  • 城市名
  • CITY.id

......各种组合。

是的,只需直接在酒店和城市之间加入,并将两个LIKE语句移到WHERE子句中。

如果您可以更改表结构,并且如果存在大量重复的名称,则可以将名称标准化为键,并在较小的表中搜索与名称匹配的键,然后根据名称的键查找数据。

还可以根据“OMG Ponies”答案添加索引。

提高性能的一种方法是在这些表的名称列上放置全文索引。

我也想做 - > LIKE'%term1%',但它非常慢

也许name LIKE '$term%' OR reverse_name LIKE '$reverse_term%'name LIKE '%$term%'快。 当然有适当的意义。

我从没试过......只是突然出现在我的脑海里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM