0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

テーブルにおけるインデックスの効果

Last updated at Posted at 2025-01-01

1. 目的

目的の行を早めに見つけ、クエリの処理速度の向上を目的とする。

今回はインデックスの効果を簡易的に確認する。

▪️ DB:MySQL

【用語】
・key:設定したインデックス
・rows:取得される行の見積もり

2. テーブル・データ作成

CREATE TABLE `test` (
  `id` int NOT NULL,
  `name` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `age` int NOT NULL,
  `is_manager` int NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

データを10000件用意し、idが10000のデータのageは16で登録する。

id name age is_manager
1 山田太郎 15 1

・・・・・・・・・・・
・・・・・・・・・・・
・・・・・・・・・・・
・・・・・・・・・・・
id name age is_manager
10000 山田太郎 16 1

3. データ検索

ageが16のデータを検索する。

EXPLAIN SELECT * FROM test WHERE age = 16;
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE test NULL ALL NULL NULL NULL NULL 9867 10.00 Using where

・key:NULL
・rows:9867

4. インデックス設定

インデックスをageカラムに設定する。

CREATE INDEX index_age ON test(age);

5. 再度検索

再度検索する。

EXPLAIN SELECT * FROM test WHERE age = 16;
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE test NULL ref index_age index_age 4 const 1 100.00 NULL

・key:index_age
・rows:1

6. 結果

rowsが明らかに減ったことがわかる。

7. インデックスが効かない場合

こちらのサイトで解説してくださっています。
https://qiita.com/MURAMASA2470/items/d06cb3b6ad6b43b12a4b

8. 記事の参考

・EXPLAINについて
https://qiita.com/chii-08/items/e6a3ff51129ef1167ab6

・インデックスについて
https://qiita.com/masayasviel/items/b4f2fe76235f30270b07
https://supersoftware.jp/tech/20240610/19469/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?