我有一张有将近16万张唱片的城市桌子。我有一个自动完成文本框,我有一个查询来获取城市数据和国家数据,如下所示:

SELECT m.idmetrocenter, m.idcountry, m.metrocentername,
c.idcountry, c.countryname FROM metrocenter m
INNER JOIN country c ON m.idcountry = c.idcountry
WHERE (m.metrocentername like "ap%" OR c.countryname like "ap%")
ORDER BY m.metrocentername, c.countryname
LIMIT 10

这个查询需要更多的时间来响应,它的响应时间几乎是110秒。
我已经在idmetrocenter、idcountry、metrocentername、countryname上创建了索引。即使在那时,反应也很差。
有谁能帮我把这个产量提高一点吗。我现在正在使用教义。如果有人能让我知道,在教义上的解决办法会更好。
提前谢谢

最佳答案

首先尝试explain查询,看看是否有效地使用了索引:
mysql> EXPLAIN SELECT m.idmetrocenter AS m__idmetrocenter, m.idcountry AS m__idcountry, m.metrocentername AS m__metrocentername, c.idcountry AS c__idcountry, c.countryname AS c__countryname FROM metrocenter m INNER JOIN country c ON m.idcountry = c.idcountry WHERE (m.metrocentername like "ap%" OR c.countryname like "ap%") ORDER BY m.metrocentername, c.countryname LIMIT 10 \G
第二:
尝试将LIKE语句更改为全文搜索(MATCH/AGAINST
http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

07-28 02:47