勉強したことのメモ

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

  関連記事

mysqldumpが使えないレンタルサーバでMySQLのバックアップ
mysqldumpが使えないレンタルサーバでMySQLのバックアップ

mysqldumpが使えないレンタルサーバで開発を行うことがあり、尚且つ他社に使 ...

MySQLでカラム数の異なるテーブルを結合する(UNION)
MySQLでカラム数の異なるテーブルを結合する(UNION)

MySQLでカラム数の異なるテーブル同士をUNIONで結合させたかった。ただ、何 ...

MySQLで経度緯度から半径○Kmのデータを抽出する方法
MySQLで経度緯度から半径○Kmのデータを抽出する方法

経度と緯度をtext型として格納しているMySQLのテーブルがあり、指定した経度 ...

MySQLで開始~終了日時の間隔を計算し分に変換して出力する方法
MySQLで開始~終了日時の間隔を計算し分に変換して出力する方法

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

さくらインターネットでCronからmysqldumpすると0バイトのファイルが生成される
さくらインターネットでCronからmysqldumpすると0バイトのファイルが生成される

さくらインターネットのレンタルサーバでmysqldumpした結果をファイルとして ...