2009-11-01 7 views
9

ten składa się z dwóch pytań:O ile szybszy jest znacznik czasu niż kolumna datetime w MySQL?

  1. Czy timestamp pola MySQL naprawdę szybciej niż datetime polu „zamówienia przez” kwerendy?

  2. Jeśli odpowiedź na powyższe pytanie brzmi "tak", o ile jest to możliwe szybciej? Są one umieszczone w tabeli zawierającej 100 milionów wierszy i często sortują kilka wierszy w liczbie 100-200 000 na podstawie pola znacznika czasu w MySQL, czy poprawa czasu sortowania zostanie skompensowana przez konwersję znacznika czasu na czytelny format ciągu w programie zewnętrznym?

Odpowiedz

9

Najprostszym sposobem, aby się dowiedzieć, jest napisanie testu jednostkowego, a właściwie uzyskanie pewnych liczb.

Moja teoria, że ​​timestamp byłoby szybciej, ale zgodnie z tym blogu mylę: http://dbscience.blogspot.com/2008/08/can-timestamp-be-slower-than-datetime.html

Dlatego staram się uzyskać numery, przez profilowanie, zanim zdecyduję, gdzie do optymalizacji, jak mój brzuch uczucie może czasami być bardzo złe.

Może to być zależne od używanej wersji MySQL, ale wydaje się, że data/godzina może być szybsza.

+1

Ta sama historia tutaj: http://www.dbtuna.com/article.asp?id=36 –

3

Z tego, co mogę powiedzieć, główną zaletą używania TIMESTAMP przez DATETIME jest możliwość automatycznego ustawienia wartości do bieżącego czasu utworzenia wiersza i możliwość ustawienia go (lub innej kolumny przy niewielkim wysiłku) do aktualny czas aktualizacji wiersza. Pozwala to na automatyczne utworzenie i modyfikację daty.

Z powodu innych ograniczeń w kolumnie TIMESTAMP (na przykład nie przyjmowanie dat poza określony zakres lub zmiana w przypadku zmiany strefy czasowej serwera), DATETIME będzie preferowane, jeśli nie jest Ci potrzebny z dwóch funkcji z góry.

Jednakże, jeśli interesuje Cię tylko przechowywanie uniksowego znacznika czasu w bazie danych i nie wymaga bazy danych, aby kiedykolwiek go przekonwertować, prawdopodobnie możesz zapisać go jako niepodpisaną liczbę całkowitą bezpośrednio i osiągnąć nieznaczną wydajność.

+0

@Jason: Jak sądzisz, ustawianie parametru jako NOW()? –

+0

Jestem świadomy. Różnica polega na tym, że wartość TIMESTAMP zostaje ustawiona bez określenia w INSERT lub UPDATE. Osobiście używam DATETIME, a moja abstrakcyjna warstwa DB aktualizuje automatycznie utworzone i zmodyfikowane pola. – Jason

+0

@Jason, dzięki za twój wkład. Dbam tylko o wydajność sortowania danych w tym przypadku, limit zasięgu pola timestamp nie jest problemem. Wiem, że inną zaletą pola znacznika czasu jest to, że potrzebuje 381,5 MB miejsca na dysku na 100 milionów wierszy tabeli. – jack

Powiązane problemy