MySQL: Optimal index for between queries

后端 未结 5 850
南笙
南笙 2021-02-19 13:26

I have a table with the following structure:

CREATE TABLE `geo_ip` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `start_ip` int(10) unsigned NOT NULL,
  `end_ip         


        
5条回答
  •  天涯浪人
    2021-02-19 14:06

    Not sure why, but adding an order by clause and limit to the query seems to always result in an index hit, and executes in a few milliseconds instead of a few seconds.

    explain select * from geo_ip where 2393196360 between start_ip and end_ip order by start_ip desc limit 1;
    +----+-------------+--------+-------+-----------------+----------+---------+------+--------+-------------+
    | id | select_type | table  | type  | possible_keys   | key      | key_len | ref  | rows   | Extra       |
    +----+-------------+--------+-------+-----------------+----------+---------+------+--------+-------------+
    |  1 | SIMPLE      | geo_ip | range | start_ip,end_ip | start_ip | 4       | NULL | 975222 | Using where |
    +----+-------------+--------+-------+-----------------+----------+---------+------+--------+-------------+
    

    This is good enough for me now, although I would love to know the reasoning behind why the optimizer decides not to use the index in the other case.

提交回复
热议问题