请问:怎么优化这条sql

请教:如何优化这条sql?

我有倆个表、一个是全部城市的表(数据量3K左右)、一个是所有ip段的表(数据量为47W左右)、

  就是想知道一个ip是哪里的城市、 给于显示 该城市id 、名、和大区

SQL code


  select district1_.CN_ID  , district1_.CN_BIG_AREA , district1_.CN_NAME  from MD_IP_ADDR ipaddress0_ 
 cross join MD_DISTRICT district1_ 
where ipaddress0_.CN_CITY_ID=district1_.CN_ID 
and INET_ATON('202.96.64.68')>=ipaddress0_.CN_IP1_LONG 
and INET_ATON('202.96.64.68')<=ipaddress0_.CN_IP2_LONG limit 1

这条语句在mysql里查询第一次是3秒多、第二次才是0.3秒左右、

所以想问下有没有优化该sql的途径?

另外该语句写在java的程序里、使用基本的connection 和perparstatement 进行查询、每次都是3秒左右、

感觉perparstatement 根本没有预编译过、

如果有优化的方式可以告诉我下、先谢谢各位了、



建立冗余字段,保存INET_ATON(IP)的值,在此字段上建立索引




我ip表建立了索引、

贴索引

SHOW INDEX FROM tbl_name




explain sql语句,贴结果




贴一下索引show index from tb




你的索引已经全了,没什么可优化的了。语句本身也没什么可改进的。




在WHERE 中用了函数,无法用到索引,要用到索引,用1楼的方法,增加字段

请问:怎么优化这条sql

相关文章:

你感兴趣的文章:

标签云: