勉強したことのメモ

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でデータがあれば上書き、無ければ挿入する

既存のソースを編集時に「REPLACE INTO~~」 という見たことの無いSQ ...

MySQLにてSELECT時にdate型のカラムから干支(十二支)を計算し表示する方法
MySQLにてSELECT時にdate型のカラムから干支(十二支)を計算し表示する方法

MySQLにdate型のカラムに誕生年月日が格納されており、そこから干支(十二支 ...

Codeigniter4でMySQLに接続しCRUD操作する方法
Codeigniter4でMySQLに接続しCRUD操作する方法

Codeigniter4.4.4でMySQLに接続しCRUD操作したい。また、任 ...

MySQLでグループ化したものを条件で絞る(HAVING)
MySQLでグループ化したものを条件で絞る(HAVING)

正規化したテーブルがあってその中には idとtagのカラムがある。 でtagの方 ...

エックスサーバーでMySQLのサイズに注意
エックスサーバーでMySQLのサイズに注意

エックスサーバーで自動更新のログをMySQLに保存するようなシステムを動かしてい ...