Хранение микросекунд в MySQL: какой обходной путь? - PullRequest
10 голосов
/ 13 февраля 2010

мы пишем научный инструмент с поддержкой MySQL. Проблема в том, что нам нужна точность в микросекундах для полей даты и времени, которые MySQL в настоящее время не поддерживает. Я вижу здесь как минимум два обходных пути:

  • Использование типа столбца decimal () с целочисленной частью, соответствующей секундам с некоторого момента времени (я сомневаюсь, что эпоха UNIX подойдет, поскольку мы должны хранить измерения, сделанные в 60-х и 50-х годах).
  • Использование двух целочисленных столбцов, один для секунд, другой для микросекунд.

Самый популярный запрос - это выбор столбцов, соответствующих временному интервалу (т.е. dt_record> time1 и dt_record

Какой из этих методов (или, возможно, другой) может обеспечить более высокую производительность в случае больших таблиц (миллионов строк)?

Ответы [ 3 ]

5 голосов
/ 13 марта 2012

MySQL будет поддерживать микросекунды, см. MySQL 5.6.4 журнал изменений :

Обработка дробных секунд

Несовместимое изменение: MySQL теперь разрешает доли секунды для ВРЕМЕНИ, DATETIME и TIMESTAMP значения, с точностью до микросекунд (6 цифр) точность. Чтобы определить столбец, который включает часть доли секунды, используйте синтаксис type_name (fsp), где type_name - это TIME, DATETIME или TIMESTAMP, а fsp - точность долей секунды. Например:

CREATE TABLE t1 (t TIME (3), dt DATETIME (6)); Значение FSP, если дано, должно быть в диапазоне от 0 до 6. Значение 0 означает, что нет дробная часть. Если опущено, точность по умолчанию равна 0. (Это отличается из стандартного SQL по умолчанию 6, для совместимости с предыдущими Версии MySQL.)

Следующие пункты суммируют последствия этого изменения. Увидеть также раздел 10.3.5, «Дробные секунды в значениях времени».

5 голосов
/ 13 февраля 2010

Если вы говорите, что самые популярные запросы основаны на времени, Я бы рекомендовал использовать один столбец, в котором хранится время, как в первом варианте .

Вы можете выбрать собственную эпоху для приложения и работать оттуда.

Это должно упростить запросы, которые необходимо написать при поиске временных интервалов.

Также взгляните на 10.3.1. Типы DATETIME, DATE и TIMESTAMP

Однако, микросекунды не могут быть сохранены в столбец любых временных данных тип. Любая часть микросекунд отбрасываются. Преобразование ВРЕМЕНИ или DATETIME значения в числовой форме (для Например, добавив +0) приводит к двойное значение с микросекундной частью из .000000

0 голосов
/ 13 февраля 2010

Как насчет разделения частей даты на часть только для даты и микросекунд с полуночи? В день меньше 2 ^ 64 микросекунд. Затем сгруппируйте таблицу по {дата, микросекунда}.

Я бы предположил, хотя я не знаю ваших данных, что некоторые запросы будут хороши с точностью до дня - «эксперименты в 1964 году» не должны беспокоиться о микросекундах.

...