【发布时间】:2011-04-19 22:35:29
【问题描述】:
我需要从包含超过 500 万行的表中选择一行。它是所有 IP 范围的表。每行都有upperbound 和lowerbound 列。都是大整数,数字是IP地址的整数表示。
选择是:
select *
from iptocity
where lowerbound < 3529167967
and upperbound >= 3529167967
limit 1;
我的问题是
...选择花费的时间太长。在 InnoDB 表上没有索引时,需要 20 秒。如果它在 MyISAM 上,则需要 6 秒。我需要它小于 0.1 秒。而且我需要能够每秒处理数百个这样的选择。
我尝试在 InnoDB 的上限和下限列上创建索引。但这并没有帮助,它需要更多的时间,比如选择 ip 需要 40 秒。怎么了?为什么索引没有帮助?索引是否仅适用于 = 运算符,而 >,
【问题讨论】:
-
BIGINT is 8 bytes, vs INT's 4 - 数据类型的字节数会影响搜索速度。
标签: mysql optimization select performance indexing