这是我目前正在执行的查询:
SELECT * FROM `datalog`
WHERE world_id IN (2)
AND action IN (0,1,2,8,9,10,11,13,14,15)
AND x = -184.0 AND y = 98.0 AND z = 141.0
ORDER BY data_id DESC;不幸的是,它花费了很长的时间,并且不知道为什么(数据库中有1400万个条目,需要5秒或更长时间)。我有一个关于world_id和动作的索引(因为最多只有7个世界和20个动作)。我还能怎么加快搜索速度呢?
EDIT -explain的值:简单数据记录全部为空13510263使用where;使用文件排序
发布于 2011-06-14 00:51:35
尝试向x、y和z添加索引。
您说过,您认为这是行不通的,因为它们可以包含很大范围的值。
只要您使用的表类型支持BTREE索引(这是MyISAM和INNODB唯一支持的索引类型),这就不应该是真的。如果您使用的是HASH索引,情况可能就是这样,因为它需要为每个值编制索引。但是使用BTREE索引,MySQL能够快速对索引中的特定值进行排序。这就是为什么它能够对带有比较运算符(<、>等)的查询使用BTREE索引的原因。
你可以在这里看到更多:http://dev.mysql.com/doc/refman/5.1/en/mysql-indexes.html
发布于 2011-06-14 00:35:36
您可以尝试将操作字段中的条件替换为AND action < 16
发布于 2011-06-14 00:37:29
不知道这是否有效,但你有没有尝试重新排序你的条件?X= -184.0可能比(...)中的操作更快。如果MySQL使用短路,这可能会加快速度。
https://stackoverflow.com/questions/6333342
复制相似问题