MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで日付範囲からレコードを高速に検索する方法|BETWEENキーワードの使い方

MySQLの日付検索に最速・最適なのはBETWEENキーワード

MySQLで特定の日付範囲内のレコードを検索する場合、最も高速かつ簡単な方法はBETWEENキーワードを使用することです。BETWEENは指定した範囲(両端の値を含む)に一致するレコードを効率的に抽出できるため、datetime型カラムへの範囲検索に非常に適しています。

まず、サンプル用のテーブルを作成しましょう。

mysql> create table DemoTable1413
-> (
-> EmployeeName varchar(20),
-> EmployeeJoiningDate datetime
-> );
Query OK, 0 rows affected (0.45 sec)

続いて、insert文でテーブルにいくつかのレコードを挿入します。

mysql> insert into DemoTable1413 values('Chris','2018-09-28 11:10:50');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable1413 values('David','2019-09-28 11:10:50');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1413 values('Mike','2019-09-29 12:40:00');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1413 values('Carol','2019-09-28 12:06:10');
Query OK, 1 row affected (0.08 sec)

select文でテーブル内のすべてのレコードを確認してみましょう。

mysql> select * from DemoTable1413;

実行結果は以下の通りです。

+--------------+---------------------+
| EmployeeName | EmployeeJoiningDate |
+--------------+---------------------+
| Chris | 2018-09-28 11:10:50 |
| David | 2019-09-28 11:10:50 |
| Mike | 2019-09-29 12:40:00 |
| Carol | 2019-09-28 12:06:10 |
+--------------+---------------------+
4 rows in set (0.00 sec)

BETWEENを使った日付範囲検索のクエリ例

それでは、指定した日付の間にあるレコードを検索するクエリを見てみましょう。重要なポイントは、終了日時を「23:59:59」まで指定することです。datetime型には時刻情報が含まれているため、「2019-09-28」とだけ指定すると、当日の午前0時ちょうどのデータしかマッチしません。

mysql> select * from DemoTable1413
-> where EmployeeJoiningDate between '2019-09-28' and '2019-09-28 23:59:59'
-> limit 1;

実行結果は以下の通りです。

+--------------+---------------------+
| EmployeeName | EmployeeJoiningDate |
+--------------+---------------------+
| David | 2019-09-28 11:10:50 |
+--------------+---------------------+
1 row in set (0.03 sec)

より堅牢な範囲指定とパフォーマンス向上のコツ

「23:59:59」での指定は直感的ですが、小数秒(マイクロ秒)を持つデータを取りこぼす可能性があります。そのようなケースでは、次のように比較演算子を組み合わせる書き方が安全です。

where EmployeeJoiningDate >= '2019-09-28'
and EmployeeJoiningDate < '2019-09-29'

さらに、EmployeeJoiningDateカラムにインデックスを作成しておけば、BETWEENによる範囲検索はインデックススキャンとして処理されるため、大量のデータがあっても高速に動作します。日付検索のクエリを頻繁に実行するテーブルでは、インデックス設計も合わせて検討するとよいでしょう。

  1. MySQLに日付レコードを挿入する最も簡単な方法は?STR_TO_DATE()関数の使い方を解説

    MySQLで日付レコードを挿入・変換するには?MySQLでは、STR_TO_DATE() 関数を使うことで、文字列として保存された日付データを日付形式に変換できます。以下が基本の構文です。SELECT STR_TO_DATE(yourColumnName, %b %Y) FROM yourTableName;この記事では、実際にテーブルを作成し、「Jan 2018」のような「月 年」形式の文字列データを日付に変換する手順を、具体例とともにわかりやすく解説します。ステップ1:テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは入社年月を格納するカラムを持つテーブルを定義します。

  2. MySQLで日付データから月の初日と末日を取得する方法

    MySQLでは、日付型のカラムから「その月の最初の日」と「最後の日」を簡単に求めることができます。この記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。1. テーブルの作成まず、日付を格納するためのテーブルを作成します。mysql> create table DemoTable -> ( -> DueDate date -> ); Query OK, 0 rows affected (0.73 sec)2. レコードの挿入次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。mysql>