Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【統計情報】種類と役割【第1回】
Search
Shin
September 08, 2024
Programming
55
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【統計情報】種類と役割【第1回】
クエリの処理時間を1秒でも短縮するには、統計情報への理解が必要不可欠です。
そこで、統計情報の最初のとっかかりとして種類と役割についてピックアップしました。
Shin
September 08, 2024
More Decks by Shin
See All by Shin
【DWH】Snowflakeのクラスタリングキーについて
sk8er_boi_shin
0
21
【DWH】Snowflakeで等価条件なのにコストが変わる理由
sk8er_boi_shin
0
19
【DWH】 PostgreSQLとSnowFlake_設計思想とデータ管理の違い
sk8er_boi_shin
0
29
【PostgreSQL】メンテナンス系コマンドの種類
sk8er_boi_shin
0
30
【データベース】統計情報と物理順序
sk8er_boi_shin
0
74
【データベース】RedisとPostgreSQL
sk8er_boi_shin
0
170
【データベース】統計情報と単一カラムのヒストグラム
sk8er_boi_shin
0
34
【データベース】制約の種類と速度検証
sk8er_boi_shin
0
39
【データベース】インデックスの種類と役割
sk8er_boi_shin
0
24
Other Decks in Programming
See All in Programming
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
120
Press start. Python's next generation.
willingc
PRO
3
310
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
580
MySQLとPostgreSQLって何が違うの?
akagami
PRO
0
170
Oxlintはいいぞ(続)
yug1224
1
550
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
2
320
Deep dive into the select statement (GopherCon UK)
jespino
0
170
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
260
XHTMLが残したもの
yosuke_furukawa
PRO
1
410
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
210
業務時間外もAIに働いてもらう話
colorful12
3
10k
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
10k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
660
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
500
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
230
Test your architecture with Archunit
thirion
2
2.4k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
460
Designing Experiences People Love
moore
143
24k
Evolving SEO for Evolving Search Engines
ryanjones
0
280
Being A Developer After 40
akosma
91
590k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Transcript
【データベース】 統計情報の役割と種類
目次 1. 統計情報の役割 2. 統計情報の主要な種類 3. 統計情報がクエリに与える影響 4. まとめ
1.統計情報の役割 • 概要 データベースがデータの全体像を把握して クエリを早く実行するために必要なガイド情報
1.統計情報の役割 • 役割 データベースがクエリを最適に実行するために、 フルスキャンやインデックススキャンを 選択する際の判断材料として利用される。
1.統計情報の役割 • 統計情報の例 ◦ テーブルにどれくらいの行があるか ◦ どのカラムにどんな値が多いか ◦ データの分布(平均値、最大値、最小値など)
2.統計情報の主要な種類 • テーブルレベルの統計情報 • カラムレベルの統計情報 • インデックスレベルの統計情報
2.統計情報の主要な種類 • テーブルレベルの統計情報: ◦ 概要 ▪ テーブル全体に関する情報。 ◦ 例 ▪
テーブルの総行数、NULL値の割合、重複度など。 ◦ 用途 ▪ テーブル全体をスキャンするか、インデックスを使うかの判断に利用。 ◦ SQL ▪ SELECT * FROM PEOPLE;
2.統計情報の主要な種類 • カラムレベルの統計情報: ◦ 概要 ▪ 各カラムのデータ分布に関する情報。 ◦ 例 ▪
カラムの値の分布(最小値、最大値、平均値) ▪ ユニークな値の数 ▪ データの頻度(ヒストグラム)など。 ◦ 用途: ▪ WHERE句の条件で、INDEXを使うかどうかを決定するために利用。 ◦ SQL ▪ SELECT * FROM PEOPLE WHERE NAME = ‘田中太郎’;
2.統計情報の主要な種類 • インデックスレベルの統計情報: ◦ 概要 ▪ インデックスに関する情報。 ◦ 例 ▪
インデックスのユニーク度(重複がどのくらいあるか) ▪ リーフレベルの深さ ▪ クラスタリングファクタ(INDEXの順序通りにデータが並んでいるか ) ◦ 用途 ▪ INDEXスキャンか、フルスキャンかを決定する際に利用。 ◦ SQL ▪ CREATE INDEX IDX_PEOPLE_1 ON PEOPLE (NAME, ADDRESS); ▪ SELECT * FROM PEOPLE WHERE NAME = ‘田中太郎’;
3.統計情報がクエリに与える影響 • ユニーク度(ヒストグラム) • 適切なインデックスの有無
3.統計情報がクエリに与える影響 • ユニーク度(ヒストグラム) ◦ データベース Postgresql ◦ テーブル名 PEOPLE ◦ 統計情報は最新の状態 ◦
データ数 400万件 ◦ index ▪ index名:Idx_people_person_id 指定カラム: person_id ▪ index名:Idx_people_duplication_many 指定カラム: duplication_many ◦ カラム ▪ PERSON_ID(INTEGER型)(一意なデータ) ▪ DUPLICATION_MANY(INTEGER型)(重複のあるデータ) • 0 :40万件 • 1 :40万件 • 2 :40万件 • 3 :280万件
3.統計情報がクエリに与える影響 • ユニーク度(ヒストグラム) 一意なデータをフィルタリングした場合
3.統計情報がクエリに与える影響 • ユニーク度(ヒストグラム) 重複のあるデータをフィルタリングした場合 取得結果は多いが、 filterがデータ量 の10%程度のため BitmapHeapScanが選択された。 取得結果がもっと多い場合 (duplication_many=3)の場合はフ
ルスキャンが選択される。
3.統計情報がクエリに与える影響 • 適切なインデックスの有無 ◦ データベース、テーブル名、統計情報最新、データ数の 4項目は先程同様 ◦ index ▪ index名:Idx_duplication_few
指定カラム: duplication_few ◦ カラム ▪ duplication_few(INTEGER型)(一意なデータ) ◦ クエリ ▪ Select * frrom people where duplication_few = 135233;
3.統計情報がクエリに与える影響 • 適切なインデックスの有無 適切なインデックスが存在する場合
3.統計情報がクエリに与える影響 • 適切なインデックスの有無 適切なインデックスが存在しない場合
4.まとめ • FROM、WHERE等を考慮しユニーク度の高いカラムからINDEXに定義 • ヒストグラムを意識したINDEX作成 ◦ 特にユニーク度が高いカラムには INDEXが効果的 ◦ ユニーク度が低くINDEXがあっても時間がかかる場合
▪ パーティション、キャッシュの利用、 LIMIT、OFFSET、非同期等