勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

MySQLで日時や日付で範囲検索する際に動作速度を向上させる方法

   2024/01/15  MySQL

MySQLでログ系等の大量にデータが格納されているテーブルから日時や日付で範囲検索する際に動作を高速化させたい。以下に対応方法をメモ。

 

対応方法

こちらの結論としてはUNIXタイムスタンプ型にするのが有効。datetime型で「2013-01-01 00:00:00」というデータではなく、int型で「1356966000」というデータを保存する。

また、検索の際はシングルクオートで囲わないようにする。

集計関連のページを作成しており、7つのSQL文があり
全部しらべたところ速度が3.6倍ほど向上した。

あとCOUNT関数よりもSUM関数で顕著な差が出た。

 

所感

全部UNIXタイムスタンプ型でいったらよさそうだけど、実務のことを考えると日々生成されるログ系をint型で、それ以外はdatetime型作るのが現実的っぽい。

 

参考サイト

http://program.sagasite.info/wiki/index.php?MySQL%E3%81%A7DATETIME%E5%9E%8B%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E9%AB%98%E9%80%9F%E3%81%AB%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95

 - MySQL

  関連記事

MySQLで特定のテーブルにパーティショニング設定し高速化を図る方法

以前に他社が設計されたログ系のテーブルを拝見した際にパーティショニング設定が行わ ...

MySQLでJOINの高速化

JOINで無茶苦茶悩んだのでメモ。やりたかった事は、MySQLで テーブルAには ...

MySQLでdatetime型にもインデックスを使用して高速化を図る方法

ログ関連のデータを格納するテーブルがあり、集計を行う際に非常に時間がかかった。レ ...