Подтвердить что ты не робот

Разница в производительности при сравнении целых чисел и сравнение строк

Может ли кто-нибудь предоставить какие-либо конкретные доказательства эффективности при сравнении

int = int

и

string = string

в WHERE в MS-SQL.

Например

select *
from Samples
where SamplesID = 5

и

select *
from Samples
where Name = 'Shampoo'

Есть ли разница или производительность одинакова?

4b9b3361

Ответ 1

OK интересный вопрос всегда считал, что целое было быстрее и никогда не проверял его. Я взял 1M Random Surnames и типы из списка контактов из моих данных в базу данных царапин без индексов или первичного ключа только необработанных данных. Никаких измерений в диапазоне моих данных ни в одной из столбцов не было стандартизировано, поэтому отражает реальность моей базы данных, а не чистый статистический набор.

select top 100 * from tblScratch where contactsurname = '<TestSurname>' order by NEWID()
select top 100 * from tblScratch where contacttyperef = 1-22 order by NEWID()

В Newid есть случайное распределение списка данных каждый раз. Быстро побежал за 20 фамилиями и 20 типами. Запросами была пропущена фамилия, чем ref, а затем фамилия. Поиск ссылочного номера был почти в 4 раза быстрее и использовался около 1/2, поэтому книги были правильными все эти годы назад.

Строка -
SELECT TOP 100 * FROM tblScratch WHERE contactsurname = 'hoare' ORDER BY NEWID()

Duration 430ms
Reads 902
CPU 203

Целое число -
SELECT TOP 100 * FROM tblScratch WHERE contacttyperef = 3 ORDER BY NEWID()

Duration 136ms
Reads 902
CPU 79

Ответ 2

Поместите оба ваших запроса в одно и то же окно запросов. На самом верху (перед любым из этих запросов):   SET STATISTICS IO ON

Когда вы запускаете код, запустите его с помощью опции "Включить фактический план выполнения" (значок на панели инструментов, который выглядит как три маленькие коробки, около 7 значков справа от кнопки "Выполнить" )

Это приведет к появлению трех вкладок в результатах: результаты, сообщения, план. Сообщения и план покажут вам стоимость ввода-вывода и полную стоимость исполнения.

Запрос с большими номерами имеет самую высокую стоимость! Этот метод позволит вам самому убедиться, какой запрос имеет самую низкую стоимость (наивысшая производительность)

Ответ 3

Как отметил Стив в комментариях, присутствие и составление индексов сильно повлияют на ваши результаты; однако, поскольку SQL Server работает со страницами для поиска данных, а более узкие типы столбцов могут хранить больше данных на странице, использование узкого типа может работать лучше, чем более широкий тип, где больше значений для рассмотрения.

Итак, если у вас небольшая таблица (несколько строк), это, вероятно, не имеет значения; большой стол? Поместите индекс в столбец int, и он, вероятно, выйдет из индексированного столбца varchar.

Конечно, то, что составляет большие или маленькие таблицы, зависит от вашего оборудования.

Ответ 4

Сравнение целых чисел должно быть более быстрым, на самом низком уровне оно будет заканчиваться инструкцией 1 cmp. Сравнение строки включает в себя больше инструкций и, как результат, худшую производительность.
Я предполагаю, что у вас есть или нет индексов в обоих полях, индексы одинаково избирательны, количество записей также одинаково