Хранение микросекунд в MySQL:какой обходной путь?
-
20-09-2019 - |
Вопрос
мы пишем научный инструмент с поддержкой MySQL.Проблема в том, что нам нужна микросекундная точность для наших полей даты и времени, которую MySQL в настоящее время не поддерживает.Я вижу здесь по крайней мере два обходных пути:
- Используя тип столбца decimal() с целой частью, соответствующей секундам с некоторого момента времени (я сомневаюсь, что подойдет эпоха UNIX, поскольку мы должны хранить измерения, сделанные в 60-х и 50-х годах).
- Используя два столбца целых чисел, один для секунд, другой для микросекунд.
Наиболее популярным запросом является выбор столбцов, соответствующих временному интервалу (т. е.dt_record > time1 и dt_record < время 2).
Какой из этих методов (или, возможно, другой), вероятно, обеспечит лучшую производительность в случае больших таблиц (миллионы строк)?
Решение
Если вы скажете, что самые популярные запросы - это временная база, Я бы порекомендовал использовать один столбец, в котором хранится время, как в вашем первом варианте.
Вы могли бы выбрать свою собственную эпоху для приложения и работать оттуда.
Это должно упростить запросы, которые необходимо писать при поиске временных интервалов.
Также взгляните на 10.3.1.Типы DATETIME, ДАТА и ВРЕМЕННАЯ МЕТКА
Однако микросекунды не могут быть сохранены в столбце любых временных данных типа.Любая часть микросекунды отбрасывается.Преобразование времени или Datetime значения в числовой форме (для например, путем добавления +0) приводит к Double значение с МКС части из .000000
Другие советы
MySQL будет поддерживать микросекунды, см. Список изменений MySQL 5.6.4:
Обработка за доли секунды
Несовместимые изменения:MySQL теперь разрешает использовать доли секунды для определения времени, Значения DATETIME и TIMESTAMP с точностью до микросекунд (6 цифр) .Чтобы определить столбец, содержащий часть с долей секунды, используйте синтаксис type_name(fsp), где type_name - ВРЕМЯ, ДАТА-ВРЕМЯ или ВРЕМЕННАЯ МЕТКА, а fsp - точность в доли секунды.Например:
СОЗДАТЬ ТАБЛИЦУ t1 (ВРЕМЯ t(3), ДАТА dt DATETIME(6));Значение fsp, если оно задано, должно находиться в диапазоне от 0 до 6.Значение 0 означает, что нет дробной части.Если этот параметр опущен, то точность по умолчанию равна 0.(Это отличается от стандартного значения SQL по умолчанию, равного 6, для совместимости с предыдущими версиями MySQL.)
В следующих пунктах кратко описываются последствия этого изменения.См. также раздел 10.3.5 “Доли секунды в значениях времени”.
Как насчет разделения частей даты на часть, содержащую только дату, и микросекунды от полуночи?В сутках меньше 2^64 микросекунд.Затем сгруппируйте таблицу по {дате, микросекунде}.
Я предполагаю, хотя я не знаю ваших данных, что некоторые запросы будут работать с точностью до дня - «эксперименты в 1964 году» не должны беспокоиться о микросекундах.