表A(实际IP表):ClientIP loc
---------------------------------
110.109.51.228 1852650468
218.59.98.232 3661325032
114.82.213.198 1918031302
....表B(IP库表):ip_s ip_e ip_s_int ip_e_int address
--------------------------------------------------------------------
59.41.141.90 59.41.141.90 992578906 992578906 广东省广州市
59.41.141.91 59.41.141.255 992578907 992579071 广东省广州市越秀区
59.41.142.0 59.41.143.255 992579072 992579583 广东省广州市从化市
....我已经将IP地址转化为了长整数
我的目的是取每一个实际IP的adress。我用的办法是建立了一个函数 dbo.ipStringToaddress
把实际IP转化的整数作为参数传给函数并返回这个IP对应的address
CREATE FUNCTION [dbo].[ipStringToaddress] 
( @ip bigint ) 
RETURNS nvarchar (50)
AS 
BEGIN 
    DECLARE @rv nvarchar (50)      
SET @rv = 
(select top 1 adress
from tempHistory.dbo.IP_list
where  @ip>= ip_s_int and  @ip<= ip_e_int
)
RETURN @rv 
END
GO
------------------------------------------------
select ClientIP,dbo.ipStringToaddress(loc) as address from 表A
------------------------------------------------
下面是问题:我的实际IP表与IP库都是50W+行数据以上的表,用各个函数为每一个ip匹配address效率就会变得很低。
(匹配完60w条数据需要7-8小时)请各位大虾不吝赐教,如何能讲效率提高呢?