Вопрос

мы пишем научный инструмент с поддержкой 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 году» не должны беспокоиться о микросекундах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top