2009-09-24 4 views
3

У нас есть много запросов, для которых мы добавляем случайный псевдоним в конце имени поля и таблицы (из-за пользовательской реализации ORM, которая может быть трудно изменить). Запросы, как следующее (хотя, по существу, более сложный, большая часть времени):Оптимизатор MS SQL Server и различные псевдонимы таблиц и полей

SELECT fooA.field1 as field1B, 
     fooA.field2 as field1C 
FROM foo as fooA 

суффиксов А, В и С генерируются случайным образом (и длиннее, чем один символ). Будет ли это ухудшать выполнение наших запросов (т. Е. Оптимизатор не сможет распознать повторяющиеся запросы из-за случайной части)? В основном мы используем SQL Server 2005.

ответ

3

Да, оптимизатор должен будет повторно обрабатывать и перекомпилировать ваш запрос каждый раз, так как хеш запроса изменится.

+0

Это только для SQL Server? –

+0

О 'Oracle' и' MySQL' (с включенным кешем запросов). Тем не менее, 'SQL Server' будет устранять константы и литералы при вычислении хэша, а' Oracle' требует дословного сопоставления. – Quassnoi

1

Модуль оптимизатора запросов использует план выполнения, который идет ObjectId - псевдонимы предназначены исключительно для программирования, но не используются во время выполнения. Поэтому я не думаю, что на производительность повлияет использование разных псевдонимов или использование небольших или длинных псевдонимов.

Quassnoi делает хороший отзыв о перепрошивке запроса. Несмотря на то, что сама производительность запроса не затронута, на окружающую среду будет влиять общая производительность.

1

Если это специальные запросы, каждый из них будет скомпилирован и кэширован как отдельный запрос. В SQL 'для запроса в соответствии с кэшированным планом текст должен быть идентичным (вплоть до case и white-space)

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

Это только хранимые процедуры, которые соответствуют запрограммированным планам по объекту