主キーを秒単位の正確なタイムスタンプとして設定できます。ただし、新しい行が最低 1 秒間隔で挿入された場合にのみ、意図したとおりに機能します。解像度をマイクロ秒まで上げることができますが、それはやり過ぎでスローなものになるのでしょうか。
時間通りに並べ替えるのは簡単なので、タイムスタンプが必要ですが、1 秒以上の処方箋は気にしません。
それらを生成する良い方法は何ですか?
主キーを秒単位の正確なタイムスタンプとして設定できます。ただし、新しい行が最低 1 秒間隔で挿入された場合にのみ、意図したとおりに機能します。解像度をマイクロ秒まで上げることができますが、それはやり過ぎでスローなものになるのでしょうか。
時間通りに並べ替えるのは簡単なので、タイムスタンプが必要ですが、1 秒以上の処方箋は気にしません。
それらを生成する良い方法は何ですか?
MySQL にタイム スタンプを自動的に生成させたい場合は、主キーとして AUTO INCREMENT 番号を使用しながら、タイムスタンプ カラムをデフォルト値で定義できます。
create temporary table tbl (
id int auto_increment primary key,
ts timestamp default current_timestamp
-- other columns follow...
);
新しいデータを挿入するには、 と の値を省略しid
ますts
。
insert into tbl values ();
select * from tbl;
+----+---------------------+
| id | ts |
+----+---------------------+
| 1 | 2012-09-20 18:24:21 |
+----+---------------------+
頻繁に検索したり並べ替えたりする場合は、タイムスタンプ列にインデックスを定義してください...
それはすべて、処理するクエリによって異なります。
実際には、TIMESTAMP
代理主キーと一部の代理主キーの両方を使用できます。後者は通常どおり auto_incremented になり、前者は一部のソート クエリに対して同様にインデックス化される場合があります。
CREATE TABLE sometable (
sometable_id INT NOT NULL AUTO_INCREMENT,
...
ts TIMESTAMP,
PRIMARY KEY (sometable_id),
KEY (ts)
);
...または、サロゲートキーを完全に削除して、PRIMARY KEY
-w なしで単一のINDEX
オーバーカラムを使用することもできます ( !=TIMESTAMP
を思い出してください)。INDEX
UNIQUE
ただし、最初のアプローチを使用します。より柔軟で拡張可能です。