У меня есть таблица с 8,2 миллионами записей в базе данных SQL Server 2005. В этой таблице хранятся основные данные о прошлом клиента (реферер, ip, введены ли они с помощью рекламы и т. Д.) Для каждого клиента, которого мы посетили на сайте. К сожалению, тот, кто спроектировал таблицу (еще до того, как я здесь оказался, я практикант), использовал поле varchar(50)
для поля ip address в таблице.
Теперь мне было поручено найти способ выполнить запрос, чтобы проверить, есть ли у нас запись для данного IP-адреса. Это первый раз, когда мне приходится иметь дело с таким большим набором данных, и независимо от того, что я делаю, я не могу значительно улучшить скорость результата.
Вот пример запроса из того, что я выполнял:
SELECT TOP(1) [ID]
FROM [dbo].[SiteVisit]
WHERE [IPAddress] = '61.135.249.118'
Этот запрос выполнялся более 2 минут и 31 секунды, прежде чем я его отменил. Есть ли способ повысить скорость этого поиска или было бы более целесообразно создать новый индекс в таблице, в котором хранятся значения INET_ATON, и выполнить поиск по этому вопросу?
Спасибо!