源地址 http://www.cnblogs.com/czh-liyu/archive/2012/02/27/2370583.html
•实战范例 1 : ip 地址反查
•资源: Ip 地址对应表,源数据格式为 startip, endip, area
源数据条数为 10 万条左右,呈很大的分散性
•目标:需要通过任意 ip 查询该 ip 所属地区
性能要求达到每秒 1000 次以上的查询效率
•挑战:如使用 between startip and endip 这样的条件数据库操作,因为涉及两个字段的 betweenand, 无法有效使用索引。
如果每次查询请求需要遍历 10 万条记录,根本不行。
•方法:一次性排序(只在数据准备中进行,数据可存储在内存序列)
折半查找(每次请求以折半查找方式进行)
假如这个表为 ip_area(startip,endip,area)
我可不可以这样
select max(startip) from ip_area where startip<=@query_ip