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?

TBL検索向上のためINDEXを用いて実行時間を縮小させた件

1
Posted at

はじめに

Desksetapp作成で開発したTBLを使って、Indexなどの開発を行いました。

背景

Desksetappを作成したさい、デプロイ時は数件程度のデータしか情報として入れていませんでした。
しかし規模を拡大するさいは、多くのデータが必要となります。
数百万のデータを取り扱うさい、今の状態だとかなり検索に時間がかかってしまうので、その解消のためにIndexなどを使いました。
(今回は開発用のデータを用いて確認しました。)

Indexとは、検索を早くするDB構造です。
本でいう目次のような役割をしています。
目次から読む場所を見つけることと同じでTBLから特定の項目データを見つけることを指します。

今回使用したTBL

workspace_sets

Name Type option
id int8
title varchar
budget int8 non-null
space int8 non-null
color varchar non-null
use_case varchar non-null

Index前後の状態

EXPLAIN analyse
SELECT *
FROM workspace_sets_dev
WHERE budget = 100000;

Seq Scan on workspace_sets_dev (cost=0.00..2975.41 rows=14441 width=102) (actual time=0.029..1028.252 rows=14409 loops=1)

Index前実行前にSQLを流すと約1028 msかかりました。

CREATE INDEX idx_workspace_sets_dev_budget
ON workspace_sets_dev (budget);

INDEXのSQLを流した後、再度SELECT文を実行すると 、以下の結果になりました。
Bitmap Heap Scan on workspace_sets_dev (cost=126.48..2031.94 rows=14437 width=102) (actual time=10.516..15.741 rows=14409 loops=1)
約16 msかかりました。60倍ほど高速化しています。

今はbudget(予算)だけでしたが、TBL項目を増やした場合、どうなるのかも確認しました。

EXPLAIN analyse
SELECT *
FROM workspace_sets_dev
WHERE budget = 100000
and space <= 100
and color = 'black';

Bitmap Heap Scan on workspace_sets_dev (cost=123.11..2100.76 rows=965 width=102) (actual time=10.050..707.145 rows=921 loops=1)

結果は約707 msとなっています。

CREATE INDEX idx_workspace_sets_dev_search
ON workspace_sets_dev (budget, space, color);

再度実行すると、
Bitmap Heap Scan on workspace_sets_dev (cost=66.41..863.85 rows=965 width=102) (actual time=3.247..5.019 rows=921 loops=1)
結果は約5 msと下がりました。

おわりに

業務でも扱ったことが少なかったので、勉強になりました。

参考文献

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?