Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
about_job Member Откуда: Сообщений: 43 |
Здравствуйте! Коллеги, помогите, пожалуйста, со следующим вопросом : Имеется запрос вида SELECT... FROM T1 JOIN T2 ... Выполняется быстро. Но если я добавляю в перечень выбираем полей выражение вида f=(select f1 from T2 where T2.f2=T1.f2), то скорость выполнения запроса резко увеличивается. Количество записей в результате запроса невелико и очевидно, что оптимально для сервера будет посчитать вычисляемое поле после выполнения основного запроса. Но сервер, похоже, вычисляет это поле на этапе соединения таблиц, когда таких записей много. |
25 ноя 15, 08:07 [18468708] Ответить | Цитировать Сообщить модератору |
Mike_za Member Откуда: Москва Сообщений: 1176 |
about_job, Приджойниете еще раз t2 cнизу, ну иои приэплите. И сравните планы |
25 ноя 15, 09:11 [18468839] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Это вы увиденный план выполнения пересказываете ? Или просто фантазируете, как это могло бы быть ?
Вы же уже сделали JOIN T2 ? Для чего нужен еще один from T2 ? |
||||
25 ноя 15, 09:34 [18468906] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
|
||
25 ноя 15, 10:01 [18469040] Ответить | Цитировать Сообщить модератору |
about_job Member Откуда: Сообщений: 43 |
Прошу прощения, для f используется таблица t3. Не могу скопировать запрос, т.к. Комп не в Инете. Решил по топорному : Сделал в виде 2-х запросов со временной таблицей. Один основной, второй выбирает все поля из временной таблицы и считает вычисляемое поле. |
25 ноя 15, 10:04 [18469052] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
И то, и другое обычно не хуже, чем выборка во временную таблицу, если, конечно, у вас не очень сложный запрос/сложные условия выборки. Но нужно, что бы сервер мог построить правильный план запроса. Вам нужно было начать с обновления статистики. |
||
25 ноя 15, 11:43 [18469819] Ответить | Цитировать Сообщить модератору |
about_job Member Откуда: Сообщений: 43 |
Выборка во временную таблицу оказалась в сотни раз быстрее, чем подзапрос. Если быть, конечно, точным до конца, то в поле выбиралось значение t3.f1, у которого максимальное f5 и f2= T1.f2. То есть имел место подзапрос в подзапросе (для получения и максимального элемента) . |
29 ноя 15, 20:42 [18488763] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Вы план выполнения то видели или нет ? |
||
29 ноя 15, 20:45 [18488770] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |