2010-02-13 10 views
8

piszemy narzędzie naukowe z obsługą MySQL. Problem polega na tym, że potrzebujemy mikrosekundowej precyzji dla pól datetime, których MySQL obecnie nie obsługuje. Widzę co najmniej dwa sposoby rozwiązania tutaj:Przechowywanie mikrosekund w MySQL: jakie obejście?

  • Korzystanie z dziesiętny() typu kolumny z częścią całkowitą odpowiadającą sekund od pewnym momencie (I wątpliwości, UNIX epoka zrobi, ponieważ mamy do przechowywania pomiarów dokonywanych Lata 60. i 50.).
  • Używanie dwóch kolumn całkowitych, jednej na sekundy, drugiej na mikrosekundy.

Najpopularniejszym zapytaniem jest wybór kolumn odpowiadających przedziałowi czasu (tj. Dt_record> time1 i dt_record < time2).

Która z tych metod (lub być może inna) prawdopodobnie zapewni lepszą wydajność w przypadku dużych tabel (miliony wierszy)?

Odpowiedz

4

Jeśli powiesz, że najpopularniejsze zapytania to podstawa czasu, , polecam przechodzić z jedną kolumną, która przechowuje czas, tak jak w pierwszej opcji.

Możesz wybrać swoją epokę dla aplikacji i pracować stamtąd.

To powinno uprościć zapytania, które należy zapisać podczas wyszukiwania przedziałów czasowych.

również uwagę na 10.3.1. The DATETIME, DATE, and TIMESTAMP Types

Jednakże mikrosekund nie mogą być przechowywane do kolumny jakichkolwiek danych czasowych typu. Dowolna część z mikrosekundami jest odrzucana jako . Konwersja czasu lub wartości daty na postać numeryczną (dla przykład przez dodanie +0) powoduje podwójnej wartości z mikrosekundy części z .000000

0

Jak rozdzieleniem części datę do Data- tylko część i mikrosekund od północy? W ciągu dnia jest mniej niż 2^64 mikrosekundy. Następnie zgrupuj tabelę w dniu {date, mikrosekund}.

Mogę zgadywać, chociaż nie znam twoich danych, że pewne pytania będą w porządku z dokładnością na dzień - "eksperymenty w 1964 roku" nie muszą martwić się o mikrosekundy.

+0

Typowe zapytania będą wymagały minimalnej dokładności na początku, co oznacza, że ​​zapytanie będzie musiało używać dwóch kolumn w klauzuli where, co, o ile rozumiem, znacząco wpłynie na wydajność. – dpq

5

MySQL będzie wspierać mikrosekund, zobacz MySQL 5.6.4 changelog:

ułamki sekund Handling

Niezgodny Zmiana: MySQL pozwala teraz ułamków sekund na czasie DateTime i wartości znacznika czasu, nawet z mikrosekund (6 cyfr) Dokładność: . Aby zdefiniować kolumnę zawierającą ułamkową część sekundową, należy użyć składni nazwa_typu (fsp), gdzie nazwa_typu to TIME, DATETIME lub TIMESTAMP, a fsp to precyzja ułamków sekund. Na przykład:

STWÓRZ TABELĘ t1 (t CZAS (3), dt DATETIME (6)); Wartość fsp, jeśli jest podana, musi zawierać się w zakresie od 0 do 6.Wartość 0 oznacza, że ​​nie ma części ułamkowej. Jeśli zostanie pominięty, domyślna precyzja wynosi 0. (Różni się to od standardowej wartości domyślnej SQL wynoszącej 6, co jest zgodne z wcześniejszymi wersjami MySQL ).

Poniższe punkty podsumowują implikacje tej zmiany. Patrz: także w Rozdziale 10.3.5, "Ułamki sekund w wartościach czasu".

Powiązane problemy