Тип данных T-SQL для 39-значного числа?
Я использую бесплатную таблицу данных IPv6 от Ip2Location. Схема таблицы определяется как:
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
Запросы к таблицам выполняются с преобразованным IPv6-адресом в IpNumber
. Предоставленный поисковый запрос:
SELECT *
FROM ip2location_db11_ipv6
WHERE @IpNumber BETWEEN ip_from AND ip_to
Мое среднее время запроса, основанное на нескольких случайных поисках, составило ~1,2 секунды. Пока есть3,458,959
записей в таблице, мне это кажется немного медленным (не так ли? Я ни в коем случае не гуру SQL). Первой моей мыслью было сделатьip_from
а также ip_to
столбцы числовой тип данных, но максимальное значение 58569107375850417935858934690443427840
(39 цифр), что выходит за пределы максимального диапазона для DECIMAL
тип. Есть ли что-нибудь, что можно сделать, чтобы сократить время запроса для этого?
1 ответ
Вы можете попробовать использовать BINARY(17)
, 39 знаков после запятой умещаются в 17 байтов. Бинарный тип doc.