|
|
|
Как лучше использовать Дату
|
|||
|---|---|---|---|
|
#18+
Хочу с вами посоветоваться... Планируется разработать БД, в которой преимущественно будет использоваться Дата. Как лучше использовать эту Дату, в разных полях или все в одном : День-Месяц-Год-Часы-минуты-секунды??? И какие у всего этого плюсы и минусы, с точки зрения последующих применнений этих данных-перекачка в другие БД, расчетов по ним и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 13:03 |
|
||
|
Как лучше использовать Дату
|
|||
|---|---|---|---|
|
#18+
1) Все функции для работы с датами функционируют только с datetime и smalldatetime. 2) Datetime и SmallDatetime занимают соотвественно (8 и 4 байта), отдельные поля с частями даты и времени будут занимать на порядок больше пространства ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 13:08 |
|
||
|
Как лучше использовать Дату
|
|||
|---|---|---|---|
|
#18+
Храни яйца в одной корзине. Остальное для лукавого, заранее раскладывание граблей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 13:10 |
|
||
|
Как лучше использовать Дату
|
|||
|---|---|---|---|
|
#18+
есть ли какая-нибудь ссылочка на интересную статейку по этому поводу??? да и еще, где посмотреть описание типов данные... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 13:52 |
|
||
|
Как лучше использовать Дату
|
|||
|---|---|---|---|
|
#18+
Вот еще, очень даже в тему: Working with Date and/or Time values in SQL Server: Don't Format, Don't Convert -- just use DATETIME ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 16:59 |
|
||
|
Как лучше использовать Дату
|
|||
|---|---|---|---|
|
#18+
cxzХочу с вами посоветоваться... Планируется разработать БД, в которой преимущественно будет использоваться Дата. Как лучше использовать эту Дату, в разных полях или все в одном : День-Месяц-Год-Часы-минуты-секунды??? И какие у всего этого плюсы и минусы, с точки зрения последующих применнений этих данных-перекачка в другие БД, расчетов по ним и т.д.Сильно зависит от того, какие типы данных есть в СУБД, с которой вы работаете. Например, в Oracle есть тип данных DATE, который как раз и предназначен для приведенной вами информации - День-Месяц-Год-Часы-минуты-секунды. Если этой точности недостаточно, то в Oracle ecть тип данных TIMESTAMP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 19:06 |
|
||
|
Как лучше использовать Дату
|
|||
|---|---|---|---|
|
#18+
Изначально этот пост был в ветке SQL Server. зы. Отдельные Date и Time будут представлены только в SQL Server 2008 :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 19:10 |
|
||
|
Как лучше использовать Дату
|
|||
|---|---|---|---|
|
#18+
Anatoly PodgoretskyХрани яйца в одной корзине. Остальное для лукавого, заранее раскладывание граблей. Ну почему же. Денормализация для повышения скорости вполне оправданна. Или я не прав? ЗЫ Под денормализацией в данном случае я имел ввиду хранение и даты, и других нужных полей (День-Месяц-Год-Часы-минуты-секунды), фигурирующих в запросах как отдельные атомы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 19:38 |
|
||
|
Как лучше использовать Дату
|
|||
|---|---|---|---|
|
#18+
Вставлю свои 5 копеек. sqllex Anatoly PodgoretskyХрани яйца в одной корзине. Остальное для лукавого, заранее раскладывание граблей. Ну почему же. Денормализация для повышения скорости вполне оправданна. Или я не прав? Это справедливо для OLAP витрин, хранилищ. Для OLTP приложений, имхо, по крайней мере, что касается SQL Server, более оптимально хранить даты в родном DateTime, SmallDateTime. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 19:43 |
|
||
|
Как лучше использовать Дату
|
|||
|---|---|---|---|
|
#18+
sqllexНу почему же. Денормализация для повышения скорости вполне оправданна. Или я не прав? Под денормализацией в данном случае я имел ввиду хранение и даты, и других нужных полей (День-Месяц-Год-Часы-минуты-секунды), фигурирующих в запросах как отдельные атомы.Это оправдано в очень редких случаях. Как говаривал старина Кнут, преждевременная оптимизация -- источник всех бед. Если у вас есть чрезвычайно критичный по времени запрос, часто выполняемый, типа "отобрать записи за всю историю, но такие, у которых час=13", то о такой оптимизации можно подумать. Но не раньше. Кроме того, и в этом случае есть альтернативы. Например, можно создать вычислимое поле "час" и проиндексировать его. В большинстве случаев, для эффективного выполнения запросов с условием на элемент даты/времени (типа "час" = 13) достаточно добавить в WHERE эффективно сужающее интервал времени условие типа "MyTime" BETWEEN "left" AND "right", где поле "MyTime" проиндексировано. Обычно в интервал попадает не такое уж большое количество записей, чтобы последующиё перебор по ним с условием "час" = 13 был недостаточно быстрым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2007, 06:42 |
|
||
|
Как лучше использовать Дату
|
|||
|---|---|---|---|
|
#18+
mir sqllexНу почему же. Денормализация для повышения скорости вполне оправданна. Или я не прав? Под денормализацией в данном случае я имел ввиду хранение и даты, и других нужных полей (День-Месяц-Год-Часы-минуты-секунды), фигурирующих в запросах как отдельные атомы. Если у вас есть чрезвычайно критичный по времени запрос, часто выполняемый, типа "отобрать записи за всю историю, но такие, у которых час=13", то о такой оптимизации можно подумать. Но не раньше. Кроме того, и в этом случае есть альтернативы. Например, можно создать вычислимое поле "час" и проиндексировать его. В большинстве случаев, для эффективного выполнения запросов с условием на элемент даты/времени (типа "час" = 13) достаточно добавить в WHERE эффективно сужающее интервал времени условие типа "MyTime" BETWEEN "left" AND "right", где поле "MyTime" проиндексировано. Обычно в интервал попадает не такое уж большое количество записей, чтобы последующиё перебор по ним с условием "час" = 13 был недостаточно быстрым. Именно это я имел ввиду. Само собой, обычно решение о денормализации принимают после получения статистики использования БД. Особое спасибо за дополнительные коментарии. Но кроме использования части даты в предикате where может быть понадобиться получение в запросе отдельно дня/года/часа/минуты... Поэтому, не будет ли разумным заранее добавить (кстати, вычислимое поле - та же денормализация) нужные поля при интенсивной работе с частью даты-времени? Может быть кто-то уже сталкивался с подобной задачей и делал тесты на реальной базе. Поделитесь, плз, результатами. Александр Волок (def1983). Я тоже обычно придерживаюсь этой точки зрения, но что думаете по вышенаписанному? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2007, 12:18 |
|
||
|
Как лучше использовать Дату
|
|||
|---|---|---|---|
|
#18+
sqllex Но кроме использования части даты в предикате where может быть понадобиться получение в запросе отдельно дня/года/часа/минуты... Александр Волок (def1983). Я тоже обычно придерживаюсь этой точки зрения, но что думаете по вышенаписанному? Что касается SQL Server, то функция Datepart довольно производительна, и, имхо, издержки на добавление и хранение нового столбца вряд ли будут сильно отличаться от простого использования DatePart + DateTime типа. (зы. Разговор идет о приземленных олтп системах) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2007, 12:27 |
|
||
|
Как лучше использовать Дату
|
|||
|---|---|---|---|
|
#18+
Александр Волок (def1983) Что касается SQL Server, то функция Datepart довольно производительна, и, имхо, издержки на добавление и хранение нового столбца вряд ли будут сильно отличаться от простого использования DatePart + DateTime типа. (зы. Разговор идет о приземленных олтп системах) Даже не смотря на то, что результат DatePart не будет проиндексирован (вычисляемые колонки - то же излишество, индексируемые представления в олтп системах скажутся на производительности)? Я, правда, сразу не могу себе представить реальную систему (не секюрити-систему), в которой бы нельзя было бы дополнительно ограничить диапазон дат, как писал mir . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2007, 18:16 |
|
||
|
Как лучше использовать Дату
|
|||
|---|---|---|---|
|
#18+
Это зависит уже от характера запросов. Если у Вас, например, стоит задача спроектировать максимально быструю среду для выполнения запросов такого порядка как: 1) Выбрать все продажи всех пятниц, 13-го сего года; 2) или выбрать самые дорогие покупки сделанные в последние субботы месяца и т.п., т.е. мало того что введенные доп. поля будут полезны, так они будут еще и достаточно селективны, то уже на этапе проектирования, можно задать такую денормализацию. Но если будут преобладать точечные или ранжированные запросы по полям типа DateTime, зачастую обычный, кластерный индекс является здравым решением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2007, 18:40 |
|
||
|
Как лучше использовать Дату
|
|||
|---|---|---|---|
|
#18+
Александр Волок (def1983)Это зависит уже от характера запросов. Если у Вас, например, стоит задача спроектировать максимально быструю среду для выполнения запросов такого порядка как: 1) Выбрать все продажи всех пятниц, 13-го сего года; 2) или выбрать самые дорогие покупки сделанные в последние субботы месяца и т.п., Я еще добавлю, что подобный ad-hoc запрос явно похож на изыски аналитика. Такие редкие, единичные запросы вряд ли назовешь критичными по времени. Необходимость менять структуру базы для их оптимизации практически равна нулю. Если уж на то пошло, изыски аналитика в OLTP -- нонсенс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2007, 07:12 |
|
||
|
Как лучше использовать Дату
|
|||
|---|---|---|---|
|
#18+
mirЯ еще добавлю, что подобный ad-hoc запрос явно похож на изыски аналитика. Такие редкие, единичные запросы вряд ли назовешь критичными по времени. Необходимость менять структуру базы для их оптимизации практически равна нулю. Если уж на то пошло, изыски аналитика в OLTP -- нонсенс. Ну я о том же :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2007, 08:22 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34775590&tid=1544319]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
161ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 455ms |

| 0 / 0 |
