首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql,使用索引for selects with operators >,<提高性能了吗?

Mysql,使用索引for selects with operators >,<提高性能了吗?
EN

Stack Overflow用户
提问于 2010-10-01 23:47:53
回答 1查看 269关注 0票数 1

我需要从超过500万行的表中选择一行。它是所有IP范围的表。每一行都有列upperboundlowerbound。都是大整数,数字是IP地址的整数表示。

选择是:

代码语言:javascript
复制
select * 
  from iptocity 
 where lowerbound < 3529167967 
   and upperbound >= 3529167967 
 limit 1;

我的问题是

...that选择花费的时间太长。如果不对InnoDB表进行索引,则需要20秒。如果是在MyISAM上,则需要6秒。我需要它少于0.1秒。我需要能够每秒处理数百次这样的选择。

我尝试在InnoDB上创建索引,在上下两列上创建索引。但这并没有帮助,它甚至花了更多的时间,比如40秒来选择ip。怎么啦?为什么索引没有帮助呢?索引只适用于=运算符,而>,<运算符不能使用索引吗?我应该怎么做才能让它的选择时间少于0.1秒?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-01 23:53:08

您是在两列上都创建了一个索引,还是创建了两个索引,每列一列?如果只有一个索引,那么这可能是您的问题,为每个索引创建一个索引。索引应该仍然适用于<>

除了更改索引之外,还可以运行:

代码语言:javascript
复制
EXPLAIN
select *
from iptocity
where lowerbound<3529167967
  and upperbound>=3529167967
limit 1;

与您的查询相同,只是添加了EXPLAIN和一些换行符以提高可读性。

EXPLAIN关键字将使MySQL向您解释它是如何运行查询的,并且它将告诉您是否正在使用索引。对于任何运行缓慢的查询,请始终使用explain来尝试找出发生了什么。

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

https://stackoverflow.com/questions/3840808

复制
相关文章

相似问题

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