Производительность SQL Server и полные имена таблиц - PullRequest
8 голосов
/ 11 июля 2009

Кажется вполне приемлемым, что включение в запрос владельца схемы увеличивает производительность дБ, например ::10000

SELECT x FROM [dbo].Foo против SELECT x FROM Foo.

Это должно сохранить поиск, потому что в противном случае SQL Server будет искать таблицу Foo, принадлежащую пользователю в контексте соединения.

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

SELECT x FROM MyDatabase.[dbo].Foo

Есть ли в этом правда? Имеет ли это смысл в качестве стандарта кодирования? Перечисляет ли что-либо из этого (даже первый пример) ощутимые выгоды?

Мы говорим о нескольких циклах для дополнительного поиска в словаре на сервере базы данных по сравнению с более раздутым SQL и дополнительной конкатенации на веб-сервере (или другом клиенте)?

Ответы [ 5 ]

11 голосов
/ 11 июля 2009

Следует помнить, что это обязательная компиляция, а не исполнительная. Таким образом, если вы выполняете один и тот же запрос 1 миллион раз, только первое выполнение «достигнет» времени поиска, остальные будут повторно использовать тот же план, и планы предварительно привязаны (имена уже преобразованы в идентификаторы объектов).

4 голосов
/ 11 июля 2009

В этом случае я лично предпочел бы удобочитаемость, а не незначительное увеличение производительности, которое это могло бы вызвать, если таковое имеется.

SELECT * FROM Foo 

Кажется, что сканировать намного проще, чем:

SELECT * FROM MyDatabase.[dbo].Foo
1 голос
/ 11 июля 2009

SQL-сервер не будет производить дополнительный поиск, если схема по умолчанию такая же. Он должен быть включен, если это не так, и это часто используемый запрос.

Имя базы данных не повлияет на производительность запроса. Я думаю, что это можно увидеть в плане примерного выполнения в Management Studio.

1 голос
/ 11 июля 2009

Попробуйте? Просто переберите миллионы запросов обоих и посмотрите, какой из них завершится первым.

Полагаю, это куча койки. Разработчики MS SQL тратят миллионы часов на изучение эффективности алгоритмов поиска и методов хранения только для пользователей, которые не задают полные имена таблиц? Смехотворны.

0 голосов
/ 11 июля 2009

Как сказал Спенсер - попробуйте, конечно, убедитесь, что вы очищаете кэш каждый раз, так как это повлияет на ваши результаты.

http://www.devx.com/tips/Tip/14401

Я также был бы удивлен, если бы это имело какое-либо заметное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...