#やりたいこと
インデックスを使わないと、どういったことが発生するのかを実験をします。
DBを触ったことがない人向けに作りたいと思いました
#前提
・postgreSQL1000万件のデータをinsertしたテーブルを使います
・データベースはAWS RDS PostgreSQLを使います。
(インスタンスタイプはt3.micro)
以前の記事
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の完了に時間がかかる。
約6秒かかりました。
(2)について
連続でSQLを実行すると、データベースのCPU使用率が30%になる。
#(1) select 1回の処理時間
・実行時間はこちら (約6秒)
Excution Time: 6336.652ms
・Seq Scanなので、全件のデータを取得してます。
並列処理しているようです
#(2)のselectを100回実行したときのCPU
100回順番に実行。プログラムを実行開始して終わるまでに10分ほどかかりました・・
CPU負荷が増えています。
#他に考えられる問題
max_connectionも問題になります。
6秒かかるということは、連続非同期でSQLを実行すると、プールが処理が終わってないため、connectionが増えていきます。
AWS RDS t3.microのmax_connectionsは83。
83以上になると、エラーになり処理できなくなります。
#結果
というわけでインデックスを使いましょう。
#次
次はインデックスを使った場合とパーティーションテーブルを使ったときもやりたいと思います。