mysql未在查询之间使用索引

mysql未在查询之间使用索引,mysql,sql,Mysql,Sql,表有100845行。我尝试在特定国家的IP范围内按IP(ip2long)检测国家 SELECT `country_code` FROM `geo_ip_country` WHERE 3271557119 BETWEEN `start_ip_long` AND `end_ip_long` start_ip_long和end_ip_long都被索引。但是根据解释查询,查询没有使用索引,而是对所有100845行执行全表扫描 id select_type table type po

表有100845行。我尝试在特定国家的IP范围内按IP(ip2long)检测国家

SELECT `country_code` FROM `geo_ip_country`
WHERE 3271557119 BETWEEN `start_ip_long` AND `end_ip_long`
start_ip_long
end_ip_long
都被索引。但是根据
解释查询
,查询没有使用索引,而是对所有100845行执行全表扫描

id  select_type     table   type    possible_keys   rows    Extra   
1   SIMPLE  geo_ip_country  ALL     key_name        100845  Using where
我试过:

  • start\u ip\u long
    end\u ip\u long
  • 在上制作综合索引(开始时长,结束时长)
  • 只在
    start\u ip\u long上建立一个索引

如何优化此查询或表,使其在这种情况下使用索引?

如果
end\u ip\u long
上没有索引,则我的应用程序不需要索引。但是我认为需要优化一个我有一个复合索引的查询(start_ip_long,end_ip_long)。我只是尝试只为
start\u ip\u long
编制索引,但这并没有改变查询的行为方式。它没有编制索引,因为为了将查询与
end\u ip\u long
进行比较,必须读取和扫描整个表。你可能需要一个关于
(start\u ip\u long,end\u ip\u long)
的索引。你所说的
(geo\u ip\u country,start\u ip\u long)
到底是什么意思?
geo\u ip\u country
不是一个表,不是一个列吗?我首先尝试两个独立的新索引,一个在
start\u ip\u long
上,另一个在
end\u ip\u long
上。(有关该建议的一些理由,请参见。)