我有一个简单的查询:
SELECT distinct state FROM customers WHERE country = 'us'
我们的想法是获取客户所在的美国州名单。
我有大约800k行,以及state
和country
上的索引。此查询需要大约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
答案 0 :(得分:0)