powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос про производительность
5 сообщений из 5, страница 1 из 1
Вопрос про производительность
    #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
Вопрос про производительность
    #40105050
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вычисления так или сяк очень слабо влияют на производительность запросов.
О вечном думать надо - хранить дату как дату - и будет тебе щастье.
...
Рейтинг: 0 / 0
Вопрос про производительность
    #40105052
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikk,
откройте для себя план выполнения запроса
нарисованные около операторов процентики как бы явно укажут место, за которое надо волноваться в плане производительности
ну и за одно увидите, что вся строчная математика в вариантах вынесена в отдельный оператор, а остальное всё идентично и как раз наиболее "ресурсоемко"
...
Рейтинг: 0 / 0
Вопрос про производительность
    #40105054
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
интереснее будет, когда весь этот матглум пойдёт в join/where/group
...
Рейтинг: 0 / 0
Вопрос про производительность
    #40105066
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk
Во втором варианте с учетом повторяющихся расчетов насколько сильно теряется производительность?
Теряется, теоретически, но настолько мало, что измерить это не получится.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос про производительность
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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