勉強したことのメモ

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

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

   2024/01/15  MySQL / MariaDB

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 / MariaDB

  関連記事

MySQLで「doesn't have a default value」エラーの対処
MySQLで「doesn't have a default value」エラーの対処

MySQLでINSERT時に「Field 'カラム名' doesn't have ...

InnoDBのオートインクリメントで抜け番が発生する原因について
InnoDBのオートインクリメントで抜け番が発生する原因について

MySQLのInnoDBでIDというカラムにオートインクリメント設定していたが、 ...

MySQLで指定したカラムの最頻値を抽出する方法
MySQLで指定したカラムの最頻値を抽出する方法

MySQLで指定したカラムの最頻値(全データの中で最も多く出現する値)を抽出した ...

MySQLでWhere句をつけてdumpファイルを出力する方法
MySQLでWhere句をつけてdumpファイルを出力する方法

MySQLであるテーブルからWhere句をつけて、絞った結果をダンプさせたかった ...

MySQLでホスト指定しても正常に接続できない場合
MySQLでホスト指定しても正常に接続できない場合

MySQL自体は動いており、ユーザーも登録されているのに、ホスト名を指定しても正 ...