mysql> CREATE TABLE _netbounds_test -> ( -> id INTEGER UNSIGNED NOT NULL, -> netpoly GEOMETRY NOT NULL, -> ip_from INTEGER UNSIGNED NOT NULL, -> ip_to INTEGER UNSIGNED NOT NULL, -> PRIMARY KEY (id), -> SPATIAL INDEX i_net (netpoly) -> ); Query OK, 0 rows affected (0.15 sec) mysql> INSERT INTO _netbounds_test ( id, netpoly, ip_from, ip_to ) -> SELECT id, GEOMFROMWKB(POLYGON(LINESTRING( -> POINT(net, -1), -> POINT(net + POWER(2,32-cidr)-1, -1), -> POINT(net + POWER(2,32-cidr)-1, 1), -> POINT(net, 1), -> POINT(net, -1) -> ))), -> net, net + POWER(2,32-cidr)-1 -> FROM networks -> WHERE cidr != 0; Query OK, 119663 rows affected (32.89 sec) Records: 119663 Duplicates: 0 Warnings: 0 (1a) mysql> EXPLAIN -> SELECT id, INET_NTOA(n.net) net, cidr, ASTEXT(netpoly) geom -> FROM _netbounds_test t FORCE INDEX (i_net) -> LEFT JOIN networks n USING (id) -> WHERE Contains( t.netpoly, GEOMFROMWKB( POINT( INET_ATON('10.1.68.47'), 0 ) ) ) =1; +----+-------------+-------+--------+---------------+---------+---------+----------------+--------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+--------+---------------+---------+---------+----------------+--------+-------------+ | 1 | SIMPLE | t | ALL | NULL | NULL | NULL | NULL | 119663 | Using where | | 1 | SIMPLE | n | eq_ref | PRIMARY | PRIMARY | 4 | inventory.t.id | 1 | | +----+-------------+-------+--------+---------------+---------+---------+----------------+--------+-------------+ 2 rows in set (0.01 sec) (1b) mysql> SELECT id, INET_NTOA(n.net) net, cidr, ASTEXT(netpoly) geom -> FROM _netbounds_test t FORCE INDEX (i_net) -> LEFT JOIN networks n USING (id) -> WHERE Contains( t.netpoly, GEOMFROMWKB( POINT( INET_ATON('10.1.68.47'), 0 ) ) ) =1; +----+-----------+------+---------------------------------------------------------------------------+ | id | net | cidr | geom | +----+-----------+------+---------------------------------------------------------------------------+ | 15 | 10.0.0.0 | 10 | POLYGON((167772160 -1,171966463 -1,171966463 1,167772160 1,167772160 -1)) | | 39 | 10.1.68.0 | 23 | POLYGON((167855104 -1,167855615 -1,167855615 1,167855104 1,167855104 -1)) | +----+-----------+------+---------------------------------------------------------------------------+ 2 rows in set (1.46 sec) (2a) mysql> EXPLAIN -> SELECT id, INET_NTOA(n.net) net, cidr, ASTEXT(netpoly) geom -> FROM _netbounds_test t FORCE INDEX (i_net) -> LEFT JOIN networks n USING (id) -> WHERE Contains( t.netpoly, GEOMFROMWKB( POINT( INET_ATON('10.1.68.47'), 0 ) ) ); +----+-------------+-------+--------+---------------+---------+---------+----------------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+--------+---------------+---------+---------+----------------+------+-------------+ | 1 | SIMPLE | t | range | i_net | i_net | 32 | NULL | 1 | Using where | | 1 | SIMPLE | n | eq_ref | PRIMARY | PRIMARY | 4 | inventory.t.id | 1 | | +----+-------------+-------+--------+---------------+---------+---------+----------------+------+-------------+ 2 rows in set (0.00 sec) (2b)mysql> SELECT id, INET_NTOA(n.net) net, cidr, ASTEXT(netpoly) geom -> FROM _netbounds_test t FORCE INDEX (i_net) -> LEFT JOIN networks n USING (id) -> WHERE Contains( t.netpoly, GEOMFROMWKB( POINT( INET_ATON('10.1.68.47'), 0 ) ) ); Empty set (0.00 sec)