Tsql 39位数字的T-SQL数据类型?

Tsql 39位数字的T-SQL数据类型?,tsql,ip2location,Tsql,Ip2location,我正在使用来自的免费IPv6数据表。表架构定义为: CREATE TABLE [ip2location].[dbo].[ip2location_db11_ipv6]( [ip_from] char(39) NOT NULL, [ip_to] char(39) NOT NULL, [country_code] nvarchar(2) NOT NULL, [country_name] nvarchar(64) NOT NULL, [region_name] n

我正在使用来自的免费IPv6数据表。表架构定义为:

CREATE TABLE [ip2location].[dbo].[ip2location_db11_ipv6](
    [ip_from] char(39) NOT NULL,
    [ip_to] char(39) NOT NULL,
    [country_code] nvarchar(2) NOT NULL,
    [country_name] nvarchar(64) NOT NULL,
    [region_name] nvarchar(128) NOT NULL,
    [city_name] nvarchar(128) NOT NULL,
    [latitude] float NOT NULL,
    [longitude] float NOT NULL,
    [zip_code] nvarchar(30) NOT NULL,
    [time_zone] nvarchar(8) NOT NULL
) ON [PRIMARY]
GO

CREATE INDEX [ip_from] ON [ip2location].[dbo].[ip2location_db11_ipv6]([ip_from]) ON [PRIMARY]
GO

CREATE INDEX [ip_to] ON [ip2location].[dbo].[ip2location_db11_ipv6]([ip_to]) ON [PRIMARY]
GO
表查询是使用转换为
IpNumber
的IPv6地址完成的。提供的搜索查询是:

SELECT *
FROM ip2location_db11_ipv6
WHERE @IpNumber BETWEEN ip_from AND ip_to

基于一些随机查找,我的平均查询时间约为1.2秒。虽然表中有
3458959
记录,但这对我来说似乎有点慢(是吗?我绝不是SQL专家)。我的第一个想法是将
ip_from
ip_to
列设置为数字数据类型,但最大值是
5856910737585041793585893469044427840
(39位),这超出了
十进制
类型的最大范围。有什么办法可以缩短查询时间吗?

您可以尝试使用
二进制(17)
,17个字节中包含39位小数

您可以尝试使用
二进制(17)
,39位小数对应17个字节

什么数据库和什么版本?csv中的文本是什么样子的?既然它应该是一个日期,你能把它定为一个日期吗?Microsoft SQL Server 2016忽略我的
date
注释。我误读了数据应该是什么。您是否按照中的步骤将
IP_填充到
IP_填充到
字符串?(更正表名)您的
@IPNumber
的值和数据类型是什么?您正在使用之间的
进行隐式转换,这可能会影响您的查询时间。哪个数据库和哪个版本?csv中的文本是什么样子的?既然它应该是一个日期,你能把它定为一个日期吗?Microsoft SQL Server 2016忽略我的
date
注释。我误读了数据应该是什么。您是否按照中的步骤将
IP_填充到
IP_填充到
字符串?(更正表名)您的
@IPNumber
的值和数据类型是什么?您正在使用
之间进行隐式转换,这可能会影响查询时间。