Хранимые процедуры с префиксом sp_ и производительность
Mike Chaliy поднял интересную тему относительно именования объектов базы данных. В ней несколько раз прозвучали различные мнения относительно использования/не использования префикса sp_ для хранимых процедур. В пользу не использования обычно приводят аргумент, что sp_ это префикс для системных хранимых процедур и может возникнуть путаница. А в пользу использования, что путаница не возникнет, т.к. какие могут быть системные хранимые процедуры в пользовательской базе данных. Заблуждение и первых, и вторых в том, что использование/не использование sp_, это не вопрос стиля именования. Это вопрос производительности.
Главная проблема в том, что использование префикса sp_ в базах отличных от master приводит к следующей проблеме. Если оптимизатор встречает хранимую процедуру с префиксом sp_ от сначала проверяет, а нет ли такой системной, и если ее находит, то игнорирует вашу, а берет системную. Это приводит к двум проблемам:
- Лишняя проверка требует дополнительных затрат
- Существует довольно большая вероятность, что ваша план для такой хранимой процедуры не будет кэшироваться.
Несколько ссылок по теме:
Should I Use the sp_ Prefix for Procedure Names?
Stored Procedures Optimization Tips
Prefixing Stored Procedure Names with "sp_"