勉強したことのメモ

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で開始~終了日時の間隔を計算し分に変換して出力する方法
MySQLで開始~終了日時の間隔を計算し分に変換して出力する方法

MySQLで「開始日時」「終了日時」のdatetime型カラムがあり、開始から終 ...

MySQLでストアドプロシージャ戻り値対応版であるストアドファンクションの設定と利用方法
MySQLでストアドプロシージャ戻り値対応版であるストアドファンクションの設定と利用方法

先日MySQLのストアドプロシージャに関するメモを書いたが、今回はストアドファン ...

MySQLで「server has gone~」というエラーの対応方法
MySQLで「server has gone~」というエラーの対応方法

MySQLで「MySQL server has gone away」というエラー ...

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

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

PLESK利用時にMySQLでrootのパスワードが分からない場合の対応方法
PLESK利用時にMySQLでrootのパスワードが分からない場合の対応方法

pleskで管理しているサーバがあり、mysqlのrootのパスワードが分からな ...