Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 тормоз в переменной  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 292
Сталкивался ли кто-нибудь с такой ситуацией ли и как решить проблему?
я написал большой и достаточно сложный запрос, далее мне нужно его запускать по некоторому массиву.
в общем все хорошо, когда запрос без переменной и выглядит так

select * from TTable where app = '12345'


но все плохо, когда запрос выглядит так

declare @app varchar(10)
select * from TTable where app = @app

что за ерунда?

select @@version

Microsoft SQL Server 2012 - 11.0.5532.0 (X64)
Jul 14 2014 15:00:27
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Огромное спасибо за помощь.
20 мар 15, 14:54    [17410173]     Ответить | Цитировать Сообщить модератору
 Re: тормоз в переменной  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 292
Извините, беда в том. что запрос выполняется гораздо дольше, с использованием переменной и гораздо быстрее без переменной.
20 мар 15, 14:55    [17410181]     Ответить | Цитировать Сообщить модератору
 Re: тормоз в переменной  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
в первом случае оптимизатор будет использовать гистограмму статистики. во втором случае использует density vector
20 мар 15, 14:57    [17410196]     Ответить | Цитировать Сообщить модератору
 Re: тормоз в переменной  [new]
Glory
Member

Откуда:
Сообщений: 104760
Двоичник
беда в том. что запрос выполняется гораздо дольше, с использованием переменной и гораздо быстрее без переменной.

Тип поля таблицы какой ?
20 мар 15, 14:58    [17410200]     Ответить | Цитировать Сообщить модератору
 Re: тормоз в переменной  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 292
Glory, varchar(20)
20 мар 15, 14:59    [17410210]     Ответить | Цитировать Сообщить модератору
 Re: тормоз в переменной  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 292
churupaha, и как сделать чтобы все было хорошо? т.е. чтобы запрос выполнялся быстрее ??
спс
20 мар 15, 15:01    [17410220]     Ответить | Цитировать Сообщить модератору
 Re: тормоз в переменной  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Двоичник
churupaha, и как сделать чтобы все было хорошо? т.е. чтобы запрос выполнялся быстрее ??
спс


киньте скрипт реальной таблицы, планы запроса в обоих случаях и гистограмму по колонке app.


вариантов несколько от

select * from TTable where app = '12345'
option(optimize for (@app = '12345'))


до dynamic sql вот такого вот вида

select * from TTable where app = '12345'


какой из них лучше, зависит от выделенного жирным
20 мар 15, 15:15    [17410315]     Ответить | Цитировать Сообщить модератору
 Re: тормоз в переменной  [new]
Glory
Member

Откуда:
Сообщений: 104760
http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part1/
http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part2/
http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part3/
20 мар 15, 15:15    [17410319]     Ответить | Цитировать Сообщить модератору
 Re: тормоз в переменной  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 292
даже с
option(optimize for (@app = '12345'))

запрос выполняется уже 2 минуты.
против идеального в сабже - 5 сек

я не понимаю ,что за гистограммы, как их увидеть? о чем речь?
План запроса я понимаю как сделать.

Но весь скрипт, к сожалению не могу, накажут потом.
20 мар 15, 15:20    [17410350]     Ответить | Цитировать Сообщить модератору
 Re: тормоз в переменной  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
твой случай

ну и до кучи годные курсы pluralsight, там Kimberly Tripp все по полочкам...

SQL Server: Optimizing Ad Hoc Statement Performance
SQL Server: Optimizing Stored Procedure Performance
20 мар 15, 15:21    [17410362]     Ответить | Цитировать Сообщить модератору
 Re: тормоз в переменной  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Двоичник
План запроса я понимаю как сделать.
Ну и вы его уже посмотрели? Сравнили?
20 мар 15, 21:39    [17412036]     Ответить | Цитировать Сообщить модератору
 Re: тормоз в переменной  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33997
Блог
declare @app varchar(10)
select * from TTable where app = @app
option(recompile)


а так?
20 мар 15, 23:53    [17412579]     Ответить | Цитировать Сообщить модератору
 Re: тормоз в переменной  [new]
PZH
Member

Откуда:
Сообщений: 57
Я так понял что в первом посте опечатка и надо так:

declare @app varchar(10)
set @app = '12345'
select * from TTable where app = @app


Да?
23 мар 15, 14:42    [17419808]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить