优化此查询

时间:2010-12-07 23:47:08

标签: mysql optimization join

我正在尝试优化以下查询,但我不知道该怎么做。我对查询优化了解不多,但是key_len是不是意味着搜索386,386行? cities表有10,053行,只有27行。

SELECT c.city_name, s.state_name
FROM res_geo_cities AS c, res_geo_states AS s
WHERE c.id_state = s.id_state AND(
(
 (c.metaphone_primary IN ($one,$two) OR c.metaphone_secondary IN ($one,$two)) AND 
 (s.metaphone_primary IN ($three,$four) OR s.metaphone_secondary IN ($three,$four))
) OR (
 (c.metaphone_primary IN ($three,$four) OR c.metaphone_secondary IN ($three,$four)) AND 
 (s.metaphone_primary IN ($one,$two) OR s.metaphone_secondary IN ($one,$two))
))
LIMIT 50

这是解释:

alt text

有人可以如此友善地指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

这意味着您有两个密钥,每个密钥的长度为386.尝试使用具有“ON”子句的连接重写此查询,而不是仅从多个表中进行选择。希望这会有所帮助。