Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос про производительность / 5 сообщений из 5, страница 1 из 1
17.10.2021, 17:38
    #40105048
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про производительность
Здравствуйте!

Есть исходные данные.
SQL. Исходные данные
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
DECLARE @Table1 TABLE(	
	SKU VARCHAR(10),
	Дата INTEGER
);

INSERT INTO @Table1 
	(SKU, Дата)
VALUES
	('SKU 1', 202001),
	('SKU 2', 202002),
	('SKU 3', 202003),
	('SKU 4', 202004),
	('SKU 5', 202005),
	('SKU 6', 202006),
	('SKU 7', 202007),
	('SKU 8', 202008),
	('SKU 9', 202009),
	('SKU 10', 202010),
	('SKU 11', 202011),
	('SKU 12', 200012)
	--,('SKU 13', null)
	--,('SKU 14', 0);


Есть работающий SQL-запрос
SQL. Вариант 1
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
SELECT
	SKU,
	Дата,
	Год,
	Месяц,
	Квартал,
	CONCAT('Квартал ', Квартал) AS КварталИмя
FROM
	(SELECT
		SKU,
		Дата,
		Год,
		Месяц,
		/*(CASE
			WHEN Месяц BETWEEN 1 and 3 THEN 1
			WHEN Месяц BETWEEN 4 and 6 THEN 2
			WHEN Месяц BETWEEN 7 and 9 THEN 3
			WHEN Месяц BETWEEN 10 and 12 THEN 4
		END) AS Квартал,*/
		(Месяц - 1) / 3 + 1 AS Квартал
	FROM
		(SELECT
			SKU,
			Дата,
			--CAST(SUBSTRING(CAST(Дата AS VARCHAR), 1, 4) AS INTEGER) AS Год,
			--SUBSTRING(CAST(Дата AS VARCHAR), 1, 4) * 1 AS Год, 
			--CAST(SUBSTRING(CAST(Дата AS VARCHAR), 5, 2) AS INTEGER) AS Месяц	
			--SUBSTRING(CAST(Дата AS VARCHAR), 5, 2) * 1 AS Месяц	
			Дата / 100 AS Год,
			Дата % 1000 AS Месяц
		FROM
			@Table1 tab1) tab2) tab3;


Есть еще работающий вариант, но по короче
SQL. Вариант 2
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT
	SKU,
	Дата,
	Дата / 100 AS Год,
	Дата % 1000 AS Месяц,
	(Дата % 1000 - 1) / 3 + 1 AS Квартал, -- C повторением предыдущим расчетом
	CONCAT('Квартал ', (Дата % 1000 - 1) / 3 + 1) AS КварталИмя -- С повторением двумя предыдущими расчетами
FROM
	@Table1;


Теперь возникает следующий вопрос. Во втором варианте с учетом повторяющихся расчетов насколько сильно теряется производительность?

А также с учетом
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
--Даже если вместо
Дата / 100 AS Год
--была запись
CAST(SUBSTRING(CAST(Дата AS VARCHAR), 1, 4) AS INTEGER) AS Год

--и/или

--вместо
(Месяц - 1) / 3 + 1 AS Квартал
--была запись
(CASE
	WHEN Месяц BETWEEN 1 and 3 THEN 1
	WHEN Месяц BETWEEN 4 and 6 THEN 2
	WHEN Месяц BETWEEN 7 and 9 THEN 3
	WHEN Месяц BETWEEN 10 and 12 THEN 4
END) AS Квартал
...
Рейтинг: 0 / 0
17.10.2021, 17:50
    #40105050
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про производительность
Вычисления так или сяк очень слабо влияют на производительность запросов.
О вечном думать надо - хранить дату как дату - и будет тебе щастье.
...
Рейтинг: 0 / 0
17.10.2021, 18:06
    #40105052
andy st
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про производительность
ferzmikk,
откройте для себя план выполнения запроса
нарисованные около операторов процентики как бы явно укажут место, за которое надо волноваться в плане производительности
ну и за одно увидите, что вся строчная математика в вариантах вынесена в отдельный оператор, а остальное всё идентично и как раз наиболее "ресурсоемко"
...
Рейтинг: 0 / 0
17.10.2021, 18:11
    #40105054
andy st
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про производительность
интереснее будет, когда весь этот матглум пойдёт в join/where/group
...
Рейтинг: 0 / 0
17.10.2021, 20:03
    #40105066
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про производительность
ferzmikk
Во втором варианте с учетом повторяющихся расчетов насколько сильно теряется производительность?
Теряется, теоретически, но настолько мало, что измерить это не получится.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос про производительность / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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