MySQLの日付データの扱い - DATETIME型で良いのか?
MySQLを絡めたphpプログラムを作成していて、ずっと気になっていた事項が日付データの扱いだったりします。
MySQLで日付データを扱う時は、DATETIME型を利用するものというのが、世間一般の常識になっているようなのですが、これがどうも個人的に疑問に感じる部分があったのですね。
私は、DBの世界はPostgreSQLから入ったのですが、PostgreSQLでは、timestamp型という、いわゆるunixタイムスタンプでデータを取り扱うデータ型がありました。
そこで、MySQLで同じ型を探したのですが、どうも見当たらない。
全く同じ名前で、一見同じように見えるtimestamp型というデータ型はあるものの、どうやら、かなり特殊なデータ型のようで、これにハマっている人をネット上で多数見かけました。(^^;;
それでまあ、一般的に使われているらしいDATETIME型を利用していたのですが、何が違和感があるかといえば、根本的に文字列データなので、取り扱い上、色々と不便が起こる事が多い。
文字列データなので、余計に容量をとられる気がする。(内部のデータはunixタイムスタンプなどで保存されているのかもしれないので、これは予測にすぎませんが)
文字列データなので、比較時などに余計な処理が入り、速度が落ちる、処理が重くなる。
等の問題が、ざっと思いつくわけです。
そこにきて、今回、現在時刻から1時間前と比較するという処理を書こうとして、さらに面倒なことになると気づいたのです。
上記処理を思いつくままに書くと、こんな感じですよね。(php)
$pre1hour=date("Y-m-d H:i:s",time()-3600);
$sqlSELECT = "SELECT data FROM db WHERE timedata<'$pre1hour' ";
$reSELECT = mysql_query($sqlSELECT );
これって、比較のために、一度文字列型のデータを作成して、そしてDB側の比較処理では、(おそらくですが)再度、数字型に戻して比較しているのでしょうね。
なんというか、全くの無駄ではないかなぁと。
なんてことを考えていたら、日付型はint型にした方が、処理が3~4倍早くなるということをベンチマークテストで実証された方がいらっしゃいました。
MySQLでDATETIME型のデータを高速に検索する方法 | 深追い Fukaoi.org
もうすでにDATETIME型で運用を開始してしまったので、今更int型にはできませんが、次からはint型でデータを作成するようにしたいと思います。
まあ、DATETIME型の場合、phpMyAdminで調査する場合には、日付型が見やすいのがメリットではありますね。
2009年9月27日|コメント (0)|トラックバック (0)
カテゴリー:MySQL
トラックバック(0)
http://web-gijyutu.com/tools/mtos42/mt-tb.cgi/5
コメントを投稿する
(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)


