首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要关于加速此MySQL查询的建议

问需要关于加速此MySQL查询的建议
EN

Stack Overflow用户
提问于 2011-06-14 00:32:14
回答 5查看 64关注 0票数 0

这是我目前正在执行的查询:

代码语言:javascript
复制
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;使用文件排序

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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

票数 1
EN

Stack Overflow用户

发布于 2011-06-14 00:35:36

您可以尝试将操作字段中的条件替换为AND action < 16

票数 0
EN

Stack Overflow用户

发布于 2011-06-14 00:37:29

不知道这是否有效,但你有没有尝试重新排序你的条件?X= -184.0可能比(...)中的操作更快。如果MySQL使用短路,这可能会加快速度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6333342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档