mysql未在查询之间使用索引
表有100845行。我尝试在特定国家的IP范围内按IP(ip2long)检测国家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
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
上。(有关该建议的一些理由,请参见。)