1
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?

More than 3 years have passed since last update.

postgreSQL インデックスを使わないとどうなる?

Last updated at Posted at 2021-12-06

#やりたいこと
インデックスを使わないと、どういったことが発生するのかを実験をします。
DBを触ったことがない人向けに作りたいと思いました

#前提
・postgreSQL1000万件のデータをinsertしたテーブルを使います
・データベースはAWS RDS PostgreSQLを使います。
 (インスタンスタイプはt3.micro)

以前の記事
 postgreSQLで1000万件データをいれてみる
 https://qiita.com/Tarou2000/items/40bffbb4fbb5c466740b

#実験する内容
(1).以下のように1000万件から1つのデータを取得

SQL
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なので、全件のデータを取得してます。
 並列処理しているようです
 
スクリーンショット 2021-12-05 17.32.21.png

#(2)のselectを100回実行したときのCPU
100回順番に実行。プログラムを実行開始して終わるまでに10分ほどかかりました・・
CPU負荷が増えています。
スクリーンショット 2021-12-05 18.03.28.png

#他に考えられる問題
max_connectionも問題になります。
6秒かかるということは、連続非同期でSQLを実行すると、プールが処理が終わってないため、connectionが増えていきます。
AWS RDS t3.microのmax_connectionsは83。
83以上になると、エラーになり処理できなくなります。

#結果
というわけでインデックスを使いましょう。

#次
次はインデックスを使った場合とパーティーションテーブルを使ったときもやりたいと思います。

1
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
1
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?