WHERE子句显着减慢SELECT查询

时间:2016-02-09 19:08:25

标签: mysql

我有一个简单的查询:

SELECT distinct state FROM customers WHERE country = 'us'

我们的想法是获取客户所在的美国州名单。

我有大约800k行,以及statecountry上的索引。此查询需要大约4秒才能运行,这太长了,因为这需要实时。

如果我删除了WHERE条款,它几乎可以立即识别出来。我研究了为什么,当我使用WHERE子句对查询运行explain时,它不使用state索引。当我摆脱WHERE子句时,它再次开始使用状态索引。为什么会发生这种情况,有没有办法让它使用两个索引?

我已经浏览了其他类似的问题,但似乎对于我发现的问题,它们是非常复杂的查询,解决方案只是一个查询重写。不过,这很简单,我认为这是问题的核心所在。

更新

我发现如果我在us_state上做一个索引,它的工作时间大约是0.5秒,这已经足够了。我想在某些时候对WHERE子句有多个部分,因此为所有部分制作复合索引仍然不是最优的。因此,我将这个问题留待寻找更好的解决方案。

CREATETABLE

CREATE TABLE `customers` (
`country` varchar(5) DEFAULT NULL,
`st` varchar(50) DEFAULT NULL,
KEY `state` (`state`),
KEY `country` (`country`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

1 个答案:

答案 0 :(得分:0)

这个答案应该为您提供解决方案: https://stackoverflow.com/a/586834/3299157

简而言之,运行Analyze功能,看看是否加快了它的速度。

4

http://dev.mysql.com/doc/refman/5.1/en/analyze-table.html

相关问题