Thanks for the idea.
I have changed the datatype to bigint, the result is not changed.

mysql> desc select * from ip_test where startNum <= 3061579775 and
endNum >= 3061579775;
+----+-------------+---------+------+-----------------+------+---------+------+--------+-------------+
| id | select_type | table   | type | possible_keys   | key  | key_len
| ref  | rows   | Extra       |
+----+-------------+---------+------+-----------------+------+---------+------+--------+-------------+
|  1 | SIMPLE      | ip_test | ALL  | startNum,endNum | NULL | NULL
| NULL | 396528 | Using where |
+----+-------------+---------+------+-----------------+------+---------+------+--------+-------------+


CREATE TABLE `ip_test` (
  `startNum` bigint(20) NOT NULL,
  `endNum` bigint(20) NOT NULL,
  `country` varchar(50) NOT NULL default '',
  `province` varchar(50) NOT NULL default '',
  `city` varchar(50) NOT NULL default '',
  `isp` varchar(100) default NULL,
  KEY `startNum` (`startNum`),
  KEY `endNum` (`endNum`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |




在 2010年11月9日 下午5:20,Aveek Misra <ave...@yahoo-inc.com> 写道:
> I don't see how BETWEEN is not equivalent to (startNum <= and endNum >=). Of 
> course please try and let us know if that resolves the issue. But if it 
> doesn't, I suspect it is because the indexes are created on columns which are 
> floating point data type. That's because floating point numbers are 
> approximate and not stored as exact values. Attempts to treat double values 
> as exact in comparison may lead to the kind of issues that you are getting. I 
> could be wrong though; but if Johan's trick does not work, you might try and 
> change the data type to DECIMAL to see if it helps (or BIGINT if your numbers 
> are not using any digits after the decimal since BIGINT and DOUBLE both use 8 
> bytes for storage).
>

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=arch...@jab.org

Reply via email to