powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / конвертации даты в число (быстрая)
17 сообщений из 17, страница 1 из 1
конвертации даты в число (быстрая)
    #39889584
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, кто-то знает более быстрые способы перевода даты (DATE/DATETIME) в число, кроме вот этих ? 30 дек 2018 (DATE/DATETIME) -> 20181230 (INT)

интересует скорость в SELECT и WHERE


Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT TOP 3000000 YEAR(a.create_date)*10000 + MONTH(a.create_date)*100 + DAY(a.create_date) D
INTO #T32
FROM sys.objects a, sys.objects b, sys.objects c    

SELECT TOP 3000000 CAST(CONVERT(CHAR(8), a.create_date, 112) AS INT) D
INTO #T22
FROM sys.objects a, sys.objects b, sys.objects c    
...
Рейтинг: 0 / 0
конвертации даты в число (быстрая)
    #39889588
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
(DATE/DATETIME) -> (INT)


Я, конечно, понимаю что легаси и все такое, но


int - 4 байта
date - 3 байта
...
Рейтинг: 0 / 0
конвертации даты в число (быстрая)
    #39889594
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex, Угу, легаси...

Код: sql
1.
2.
3.
4.
5.
SELECT sh.next_run_date, t.name
FROM msdb.dbo.sysjobschedules sh
        INNER JOIN msdb.sys.tables tbl ON tbl.name = 'sysjobschedules'
        INNER JOIN msdb.sys.columns c ON c.object_id = tbl.object_id AND c.name = 'next_run_date'
        INNER JOIN msdb.sys.types t ON c.system_type_id = t.system_type_id
...
Рейтинг: 0 / 0
конвертации даты в число (быстрая)
    #39889613
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
a_voronin
(DATE/DATETIME) -> (INT)


Я, конечно, понимаю что легаси и все такое, но


int - 4 байта
date - 3 байта


Не все легаси -- в хранилищах есть рекомендация использовать INT вместо дат. К тому же DATETIME больше INT

И DATE_INT / 10000 -- получили год и т.п.
...
Рейтинг: 0 / 0
конвертации даты в число (быстрая)
    #39889627
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
в хранилищах есть рекомендация использовать INT вместо дат

Хмм, можно ссылку на современные рекомендации?


a_voronin
К тому же DATETIME больше INT

Ага, только 20190101000000 (это только до секунды) уже в INT не влезет, нужно BIGINT, что 8 байт.
При этом datetime2, с точностью до 3 знаков после секунды, занимает 6 байт



a_voronin
И DATE_INT / 10000 -- получили год и т.п.

т.е. вот такой "костыль", это нормально, а year(date_date) нет.
...
Рейтинг: 0 / 0
конвертации даты в число (быстрая)
    #39889633
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Minamoto
msLex, Угу, легаси...

Код: sql
1.
2.
3.
4.
5.
SELECT sh.next_run_date, t.name
FROM msdb.dbo.sysjobschedules sh
        INNER JOIN msdb.sys.tables tbl ON tbl.name = 'sysjobschedules'
        INNER JOIN msdb.sys.columns c ON c.object_id = tbl.object_id AND c.name = 'next_run_date'
        INNER JOIN msdb.sys.types t ON c.system_type_id = t.system_type_id



Это вы так не легаси пытаетесь показать?
Да это еще с SQL 2000 (а может и с 7.0) так хранится.
...
Рейтинг: 0 / 0
конвертации даты в число (быстрая)
    #39889638
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex

Это вы так не легаси пытаетесь показать?
Да это еще с SQL 2000 (а может и с 7.0) так хранится.

Это был не сарказм, а намек на то, что легаси, еще и введенный самим Майкрософтом, так что иногда приходится с этим иметь дело, даже если очень не хочется.
...
Рейтинг: 0 / 0
конвертации даты в число (быстрая)
    #39889641
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Minamoto
msLex

Это вы так не легаси пытаетесь показать?
Да это еще с SQL 2000 (а может и с 7.0) так хранится.

Это был не сарказм, а намек на то, что легаси, еще и введенный самим Майкрософтом, так что иногда приходится с этим иметь дело, даже если очень не хочется.

Ок.
Но это не делает чести "парням из Редмонда"
Вообще, структура хранение информации о джобах в msdb не та вещь, которой Майкрософт может гордиться (ну это уже совсем оффтоп).
...
Рейтинг: 0 / 0
конвертации даты в число (быстрая)
    #39889653
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
a_voronin
(DATE/DATETIME) -> (INT)


Я, конечно, понимаю что легаси и все такое, но


int - 4 байта
date - 3 байта
Каждый бит на счету!
Может, DATEDIFF(DAY,0,a.create_date)?
...
Рейтинг: 0 / 0
конвертации даты в число (быстрая)
    #39889668
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap
Каждый бит на счету!


Дело-то в том, что искусственно увеличивают размер хранимых данных, при это выполняя дополнительные преобразования, с перфомансом которых потом борются.
...
Рейтинг: 0 / 0
конвертации даты в число (быстрая)
    #39889678
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
iap
Каждый бит на счету!


Дело-то в том, что искусственно увеличивают размер хранимых данных, при это выполняя дополнительные преобразования, с перфомансом которых потом борются.


А вы уверены, что правы на 100%? Например, если взять колумнстор, если взять ключи измерений в SSAS. 3 байта надо конвертировать в 8 на 64 битных средах. А если надо считать кол-во уникальных дней?
...
Рейтинг: 0 / 0
конвертации даты в число (быстрая)
    #39889686
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot msLex#22017237]
a_voronin
в хранилищах есть рекомендация использовать INT вместо дат

Хмм, можно ссылку на современные рекомендации?


наиболее распространена ситуация, когда DATETIME типа ORDER_DATE, превращают в INT 4 байта.

Можете почитать вот это

https://dwbi1.wordpress.com/2009/12/16/date-dimension-in-analysis-services-part-2/

И вот это

https://www.kimballgroup.com/data-warehouse-business-intelligence-resources/books/data-warehouse-dw-lifecycle-toolkit/
...
Рейтинг: 0 / 0
конвертации даты в число (быстрая)
    #39889727
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
А вы уверены, что правы на 100%?

Нет, поэтому я и просил ссылки на современные рекомендации.

a_voronin
Например, если взять колумнстор

Тут не сложно проверить date vs int
Провел небольшой тест на 100 млн записей с датой +/- 1 год от текущих данных.

date занимает меньше чем int



a_voronin
А если надо считать кол-во уникальных дней?

И чем здесь выигрывает int у date?
...
Рейтинг: 0 / 0
конвертации даты в число (быстрая)
    #39889729
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
msLex
a_voronin
в хранилищах есть рекомендация использовать INT вместо дат

Хмм, можно ссылку на современные рекомендации?


наиболее распространена ситуация, когда DATETIME типа ORDER_DATE, превращают в INT 4 байта.

Можете почитать вот это

https://dwbi1.wordpress.com/2009/12/16/date-dimension-in-analysis-services-part-2/

И вот это

https://www.kimballgroup.com/data-warehouse-business-intelligence-resources/books/data-warehouse-dw-lifecycle-toolkit/



Спасибо, но
Во-первых, я просил свежие (2008 и 2009 год это совсем не то)
Во-вторых, почему вы сравниваете datetime и int? Я предлагал date.
...
Рейтинг: 0 / 0
конвертации даты в число (быстрая)
    #39889872
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://www.kimballgroup.com/data-warehouse-business-intelligence-resources/books/data-warehouse-dw-lifecycle-toolkit/

По сслыке книга 2008 года вот с таким вот вступлением:
The world of data warehousing and business intelligence has changed remarkably since the first edition of The Data Warehouse Lifecycle Toolkit was published in 1998. Ralph Kimball and the Kimball Group refined the original set of lifecycle methods and techniques.

Уже 11 лет прошло с публикации этой книги, и я думаю что можно тоже самое и сейчас сказать, в общем дату уже можно использовать в мето инта...


И давайте уже не будем СТОЛБЦЫ_ВОТ_ТАК_НАЗЫВАТЬ?
[И] [вот] [так] [квадратные] [скобочки] [ставить]?
...
Рейтинг: 0 / 0
конвертации даты в число (быстрая)
    #39890291
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Затуливетер,

Вы упорно упускаете главный момент. Фильтрация таблицы фактов по ключу даты не главная операция, которая происходит в DWH. Таблица фактов часто используется ОЛАП кубами, где есть календари основанные на INT. Также у меня есть сомнения, что вы делал OLAP кубы и знаете нюансы использование полей различных типов там.


Также данные могут выгружаться в другие виды БД, например ORACLE или Vertica и там другие расклады по месту с скорости фильтрации.

https://stackoverflow.com/questions/44934126/why-is-datekey-in-fact-tables-always-int

https://www.codeproject.com/Articles/1060016/Creating-Date-dimension-from-scratch-in-Microsoft
...
Рейтинг: 0 / 0
конвертации даты в число (быстрая)
    #39890686
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin,

Кубы я не делаю, давно игрался, поэтому тонкостей не знаю.
Знающие люди пусть ответят подтвердят что с типом Date какие-то проблемы в OLAP для sql server >= 2014 (в чем я сильно сомневаюсь, инфы такой в интернетах не нашел). И попутно вопрос, а во время выгрузки в olap нельзя преобразовать дату в int если это так важно. На крайний случай нельзя создать вычисляемы столбец DateInt на таблице и использовать его?

То что касается выгрузки, это вообще не аргумент, если надо выгружать что-то преобразуйте в нужный тип во время выгрузки, не надо для этого делать кривые базы.

А то что касается преимуществ использования date в место int то вот они:

1. Date занимает меньше места 3 байта, для int это 4 байта.
2. Получение данных из фактов простыми запросами без джойна дименшена Date. Оптимизатору намного проще получить выполнить запрос select * from dbo.SomeFactTable where Date between '20190101' and '20190201' чем запрос с джойном.
3. Нет проблем с функциями которые работают с датами.
4. Не надо писать уродские запросы, где мы преобразовываем int в дату
5. Пользователю более понятна дата, а не int в котором дата
6. Невозможно вставить не валидную дату, меньше потенциальных ошибок.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / конвертации даты в число (быстрая)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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