やりたいこと
インデックスを使うと、どうなるのか実験をします。
前の記事で、インデックスをつかわない場合を記事にしたため、差を見てみます。
前提
・postgreSQL1000万件のデータをinsertしたテーブルを使います
・データベースはAWS RDS PostgreSQLを使います。
(インスタンスタイプはt3.micro)
・PostgreSQL 13
・インデックスを作ります!!
(pgAdmin 4でインデックス作ったら1分以上かかりました)
以前の記事
postgreSQLで1000万件データをいれてみる
https://qiita.com/Tarou2000/items/40bffbb4fbb5c466740b
実験する内容
(1).以下のように1000万件から1つのデータを取得
select * from test
where id = 'ffff73bc-f31b-433d-b57d-54b88a814c5b'
(2) (1)を100回selectしてみます。
結論
(1)について
SQLの完了まで0.066ms。
やはり早い。
(2)について
連続でSQLを実行してもCPU使用率はかわらず
(1) select 1回の処理時間
・実行時間はこちら
Excution Time: 0.066ms
・Index Condなので、インデックスを使ってます
データにアクセスせずデータの場所を見つけ出してます。
(2)のselectを100回実行したときのCPU
100回順番に実行。プログラムを実行開始して終わるまでに1秒前後かかりました。
CPU負荷は変化なし。
インデックスとは
本の索引ページと同じですね
本文がデータで、索引ページがインデックス。
例えばこのデータは、60ページにあると書いてあるので、それを参照してデータを取得する感じです。
ただ、ディスク容量とのトレードオフではあります。
1000万件のデータで、
データが、805MB
インデックスが563MB
インデックスでかい!
が使うしかない。
結果
というわけでインデックスを使いましょう。
次
次はさらなる高速化を目指して、パーティーション化を行います
参考
PostgreSQL - テーブルとindexのサイズを確認する
https://blog.y-yuki.net/entry/2017/07/22/000000