10

MySQLをサポートする科学ツールを作成しています。問題は、MySQLが現在サポートしていない日時フィールドにマイクロ秒の精度が必要なことです。ここに少なくとも2つの回避策があります。

  • ある時点からの秒に対応する整数部分を持つdecimal()列タイプを使用します(60年代と50年代に取得された測定値を保存する必要があるため、UNIXエポックが機能するとは思えません)。
  • 2つの整数列を使用します。1つは秒用、もう1つはマイクロ秒用です。

最も一般的なクエリは、時間間隔に対応する列を選択することです(つまり、dt_record>time1およびdt_record<time2)。

大きなテーブル(数百万行)の場合、これらの方法のどれ(またはおそらく別の方法)がより良いパフォーマンスを提供する可能性がありますか?

4

3 に答える 3

5

最も人気のあるクエリがタイムベースであると言う場合は、最初のオプションのように時間を格納する単一の列を使用することをお勧めします

アプリケーションのエポックを選択して、そこから作業することができます。

これにより、時間間隔を検索するときに作成する必要のあるクエリが簡素化されます。

10.3.1もご覧ください。DATETIME、DATE、およびTIMESTAMPタイプ

ただし、マイクロ秒は、時間データ型の列に格納することはできません。マイクロ秒の部分はすべて破棄されます。TIMEまたはDATETIME値を数値形式に変換すると(たとえば、+ 0を加算することにより)、マイクロ秒部分が.000000のdouble値になります。

于 2010-02-13T11:45:51.897 に答える
5

MySQLはマイクロ秒をサポートします。MySQL5.6.4の変更ログを参照してください。

分数秒の処理

互換性のない変更:MySQLは、最大マイクロ秒(6桁)の精度で、TIME、DATETIME、およびTIMESTAMP値の小数秒を許可するようになりました。分数秒の部分を含む列を定義するには、構文type_name(fsp)を使用します。ここで、type_nameはTIME、DATETIME、またはTIMESTAMPであり、fspは小数秒の精度です。例えば:

CREATE TABLE t1(t TIME(3)、dt DATETIME(6)); fsp値を指定する場合は、0〜6の範囲にする必要があります。値0は、小数部がないことを意味します。省略した場合、デフォルトの精度は0です(これは、以前のMySQLバージョンとの互換性のために標準のSQLデフォルトの6とは異なります)。

次の項目は、この変更の影響をまとめたものです。セクション10.3.5「時間値の小数秒」も参照してください。

于 2012-03-13T09:59:30.570 に答える
0

日付の部分を日付のみの部分と真夜中からのマイクロ秒に分割するのはどうですか?1日は2^64マイクロ秒未満です。次に、{date、microsecond}でテーブルをクラスター化します。

あなたのデータはわかりませんが、特定のクエリは日レベルの精度で問題ないと思います。「1964年の実験」では、マイクロ秒について心配する必要はありません。

于 2010-02-13T11:55:47.693 に答える