powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Оптимизировать case
16 сообщений из 16, страница 1 из 1
Оптимизировать case
    #40054940
georgy_2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Просьба помочь с оптимизированием куска запроса

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select	1
		
			   from   (select		lot , sum(case status when 'HOLD' then qty else 0 end) as sum_qtyonhold_lli
					   from		table1
					   group by	lot) lli
					RIGHT OUTER JOIN
					table2  l on lli.lot = l.lot
			   where		isnull(lli.sum_qtyonhold_lli, 0) <> l.qtyonhold 



Как можно его переписать, что бы было меньше логического чтения?

Table 'table1'. Scan count 5, logical reads 7679
Table 'table2'. Scan count 5, logical reads 4854,


Заранее спасибо!
...
Рейтинг: 0 / 0
Оптимизировать case
    #40054944
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все агрегатные функции за исключением COUNT(*) игнорируют значения NULL.
...
Рейтинг: 0 / 0
Оптимизировать case
    #40054947
georgy_2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

Примерно понял, может есть еще какие варианты как сделать лучше?

Спасибо!
...
Рейтинг: 0 / 0
Оптимизировать case
    #40054948
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
актуальный план покажите
...
Рейтинг: 0 / 0
Оптимизировать case
    #40054950
georgy_2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
...
Рейтинг: 0 / 0
Оптимизировать case
    #40054956
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрите на индексы для начала
...
Рейтинг: 0 / 0
Оптимизировать case
    #40054958
georgy_2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

На что именно должен посмотреть? Clustered index scan?
...
Рейтинг: 0 / 0
Оптимизировать case
    #40054959
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
georgy_2012,

Код: sql
1.
isnull(lli.sum_qtyonhold_lli, 0) <> l.qtyonhold 



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

Код: sql
1.
2.
where lli.sum_qtyonhold_lli <> l.qtyonhold 
  and l.qtyonhold <> 0
...
Рейтинг: 0 / 0
Оптимизировать case
    #40054962
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Индекс lot include (qtyonhold).
...
Рейтинг: 0 / 0
Оптимизировать case
    #40054964
georgy_2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,

Большое спасибо за ответы!

А есть какой-нибудь сайт/книга/что угодно где можно было бы почитать про оптимизацию запросов по типу вот такого? Понимаю, что надо руку набивать, но набивать тоже надо на чем-то.
...
Рейтинг: 0 / 0
Оптимизировать case
    #40054972
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
много можно что почитать на эту тему. вот это посмотрите, например:
https://www.sqlshack.com/sql-server-query-execution-plan-beginners-types-options/
https://www.sqlshack.com/how-to-read-an-execution-plan-with-all-details/
...
Рейтинг: 0 / 0
Оптимизировать case
    #40054987
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
georgy_2012,

1. Оптимизировать в запросе нечего, хоть и написан он криво. Ибо будет полное сканирование таблицы/индекса и table1, и table2. Ускорить можно создав для table1 индексированное представление или columnstore index

2. Заменять isnull(lli.sum_qtyonhold_lli, 0) <> l.qtyonhold на lli.sum_qtyonhold_lli <> l.qtyonhold нельзя - условия не эквивалентны.
...
Рейтинг: 0 / 0
Оптимизировать case
    #40054988
georgy_2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

А как можно его тогда переписать, что бы не был таким кривым?
...
Рейтинг: 0 / 0
Оптимизировать case
    #40054998
georgy_2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

Спасибо за сслыки!
...
Рейтинг: 0 / 0
Оптимизировать case
    #40055002
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
georgy_2012
А как можно его тогда переписать, что бы не был таким кривым?
Не совсем понятно, что вы хотите получить.
Возможно вот такое
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select
 1
from
 (
  select lot, qtyonhold from table2

  except

  select
   lot, sum(case status when 'HOLD' then qty else 0 end)
  from
   table1
  group by
   lot
 ) a
...
Рейтинг: 0 / 0
Оптимизировать case
    #40055030
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На таком объёме данных ускорять, в общем-то, нечего.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Оптимизировать case
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]