Hi Willem:
I have the same database and the only thing different is that I included
the country iso name into the primary key:
mysql> describe ip_country_database;
+---------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+-------+
| ipstart | int(10) unsigned | | PRI | 0 | |
| ipend | int(10) unsigned | | PRI | 0 | |
| iso | char(2) | | PRI | | |
+---------+------------------+------+-----+---------+-------+
And my system indeed uses the indexes:
mysql> explain SELECT * FROM ip_country_database WHERE 12456789 BETWEEN
ipstart AND ipend;
+---------------------+-------+---------------+---------+---------+------+--
-----+--------------------------+
| table | type | possible_keys | key | key_len | ref |
rows | Extra |
+---------------------+-------+---------------+---------+---------+------+--
-----+--------------------------+
| ip_country_database | index | NULL | PRIMARY | 10 | NULL |
42971 | Using where; Using index |
+---------------------+-------+---------------+---------+---------+------+--
-----+--------------------------+
System: MySQL server 4.0.13 on a Red Hat 7.2 box.
Cheers,
Jose Miguel.
----- Original Message -----
From: "Willem Bison" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Sunday, October 05, 2003 1:08 AM
Subject: ip range lookup
> I have a table that maps ip-ranges to countries: each record consists of 2
> ip numbers (unsigned int's) and the country in which all ip's between
those
> two are located.
> How should I setup the table to have fast ip lookups ?
> Making a primary key of the 2 ip's and doing a 'select .. between ip1 and
> ip2' doesn't use the index:
>
> mysql> explain select * from ipcountry where 123456789 between ip1 and
ip2;
>
+-----------+------+---------------+------+---------+------+-------+--------
> -----+
> | table | type | possible_keys | key | key_len | ref | rows | Extra
> |
>
+-----------+------+---------------+------+---------+------+-------+--------
> -----+
> | ipcountry | ALL | NULL | NULL | NULL | NULL | 58229 | Using
> where |
>
+-----------+------+---------------+------+---------+------+-------+--------
> -----+
>
> Should I add a helper column - f.e. a column that contains the 'leftmost'
> byte of the ip - and index that ?
>
> Thanks,
> Willem Bison
>
>
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]