SlideShare una empresa de Scribd logo
1 de 20
Descargar para leer sin conexión
matsuu / qpstudy
20130728
インデックス使えてる?
じぇじぇじぇ!
● まつうです
○ hatena tmatsuu
○ twitter matsuu
○ 32歳ぐらい
● インフラエンジニアだけど元プログラマ
○ SQL好きです
○ PostgreSQL派(だけど仕事はMySQLをよく使う)
○ 仕事でチューニングやることもある
● 今日は懇親会のみ参加です
○ 勉強会の内容とかぶってたらごめんなさい
● じぇじぇとか言ってるけど朝ドラ見てない
○ じぇじぇはNHKの朝ドラ「あまちゃん」のネタです
自己紹介?じぇじぇ!
突然ですが…
クイズです
じぇじぇじぇ!
クイズの内容
● インデックスに関するクイズを3問だすよ
○ 特に景品などは用意してません
○ MySQLとPostgreSQLを想定しています
● 人の褌で相撲を取ってるよ
○ 元ネタは http://use-the-index-luke.com/3-minute-test
● 社内勉強会の使い回しネタだよ
○ じぇじぇじぇ!すみません
● 間違い等あれば適宜指摘して下さい
○ じぇじぇじぇ!ごめんなさい
インデックスとは(Wikipedia引用)
http://ja.wikipedia.org/wiki/%E7%B4%A2%E5%BC%95_(%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%
B9)
データベースの分野において、索引(さくいん)またはインデック
ス (英: index) は、表への処理を高速化するためのデータ構
造。索引は表の中の1個以上の列を対象に作成され、ランダム
な参照処理や一定の順序でのレコードへのアクセスの効率を
高めることができる。
ざっくりとしたインデックス作成方法
CREATE INDEX インデックス名 ON テーブル名(カラム,...);
(例)
2013年7月28日に作成された記事一覧を取得する
SELECT * FROM 記事 WHERE 作成日 = '2013-07-28';
→作成日にインデックスを張る
CREATE INDEX 作成日idx ON 記事 (作成日);
クイズ その1
2012年に作成された記事一覧を取得したい
SELECT * FROM 記事 WHERE year(作成日) = 2012;
次のようなインデックスを作ると効果があるか?
CREATE INDEX i1 ON 記事 (作成日);
● 速くなる
● 速くなるが、もっと良い方法がある
● 速くならない
※PostgreSQLの場合はyear(作成日)→date_part('year', 作成日)
クイズ その1こたえ
2012年に作成された記事一覧を取得したい
SELECT * FROM 記事 WHERE year(作成日) = 2012;
次のようなインデックスを作ると効果があるか?
CREATE INDEX i1 ON 記事 (作成日);
×速くなる
×速くなるが、もっと良い方法がある
○速くならない
じぇじぇじぇ!
作成日にインデックスが張られていても、YEAR(作成日)にインデックスは使われな
い。
クイズ その1対策
● 関数にインデックスを張る
CREATE INDEX i2 ON 記事 (YEAR(作成日));
→MySQLではできません
● BETWEENを使う
SELECT タイトル FROM 記事 WHERE 作成日 BETWEEN
'2012-01-01' AND '2012-12-31';
● 作成年を用意する
ALTER TABLE 記事 ADD COLUMN 作成年 INTEGER;
CREATE INDEX i3 ON 記事 (作成年);
→記事を新規作成・更新した際に作成年のケアが必要
→冗長で美しくないけどね
クイズ その2
カテゴリが「仕事」の最新の記事を1件取得したい
SELECT * FROM 記事 WHERE カテゴリ = '仕事'
ORDER BY 作成日 DESC LIMIT 1;
次のようなインデックスを作ると効果があるか?
CREATE INDEX i4 ON 記事 (カテゴリ, 作成日);
● 速くなる
● 速くなるが、もっと良い方法がある
● 速くならない
クイズ その2こたえ
カテゴリが「仕事」の最新の記事を1件取得したい
SELECT * FROM 記事 WHERE カテゴリ = '仕事'
ORDER BY 作成日 DESC LIMIT 1;
次のようなインデックスを作ると効果があるか?
CREATE INDEX i4 ON 記事 (カテゴリ, 作成日);
○速くなる
×速くなるが、もっと良い方法がある
×速くならない
じぇじぇじぇ!
クイズ その2補足
CREATE INDEXのカラムにはカラムを逆順に並べるオプション
DESCが存在する
CREATE INDEX i4 ON 記事 (カテゴリ, 作成日 DESC);
がしかし、今回のようなSQLであれば、DESCをつけてもつけな
くても応答時間は変わらない
ORDER BYにカラムが複数あり、ソート順が異なるのであれば
効果あり
(例)ORDER BY 優先度 DESC, 作成日
※ちなみにMySQLではDESCをつけても無視されれ常にASC(MySQL 5.6現在)
クイズ その3
カテゴリと投稿者で記事を絞り込みたい
1. SELECT * FROM 記事 WHERE 投稿者 = 'iara' AND カテゴリ = '勉強会';
2. SELECT * FROM 記事 WHERE 投稿者 = 'matsuu';
3. SELECT * FROM 記事 WHERE カテゴリ = 'エンタメ';
次のようなインデックスを作ると効果があるか?
CREATE INDEX i5 ON 記事 (カテゴリ, 投稿者);
● 1は速くなる?変わらない?
● 2は速くなる?変わらない?
● 3は速くなる?変わらない?
クイズ その3こたえ
カテゴリと投稿者で記事を絞り込みたい
1. SELECT * FROM 記事 WHERE 投稿者 = 'iara' AND カテゴリ = '勉強会';
2. SELECT * FROM 記事 WHERE 投稿者 = 'matsuu';
3. SELECT * FROM 記事 WHERE カテゴリ = 'エンタメ';
次のようなインデックスを作ると効果があるか?
CREATE INDEX i5 ON 記事 (カテゴリ, 投稿者);
● 1は速くなる
● 2は変わらない
● 3は速くなる
じぇじぇじぇ!
クイズ その3補足
CREATE INDEX i5 ON 記事 (カテゴリ, 投稿者);
インデックスのカラムの順番には意味がある
● 検索条件がカテゴリ→OK
● 検索条件がカテゴリと投稿者→OK
● 検索条件が投稿者→NG
● 検索条件がカテゴリとタイトル→カテゴリだけOK
投稿者のみの検索も行うなら以下も追加するのもアリかと
CREATE INDEX i6 ON 記事 (投稿者);
インデックスマージってのも一応あるよ
いかがでしたか
クイズ終了
まとめ
● SELECTが遅いようであればインデックスを
張ってみよう
○ 効果があるかきちんと確認すべし
○ 張りすぎはINSERT等が重くなるので注意
● まず検証環境を用意しましょう
○ 応答が遅くなったりするので影響がないように
○ データの内容や行数によっても変化するので本番とほ
ぼ同じデータを用意するのがいいよ
● 詳しくはUse The Index, Luke!を参照
○ http://use-the-index-luke.com/
○ 日本語の資料でいいのあれば教えてほしい
ご清聴
ありがとうございました

Más contenido relacionado

Destacado

Destacado (14)

Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内
 
Mspからみたsensu
MspからみたsensuMspからみたsensu
Mspからみたsensu
 
Gentooプリインストールなノートパソコンの話
Gentooプリインストールなノートパソコンの話Gentooプリインストールなノートパソコンの話
Gentooプリインストールなノートパソコンの話
 
DocFest 2011 Feb 自己紹介資料
DocFest 2011 Feb 自己紹介資料DocFest 2011 Feb 自己紹介資料
DocFest 2011 Feb 自己紹介資料
 
Azure Functions 入門
Azure Functions 入門Azure Functions 入門
Azure Functions 入門
 
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
 
Austin Journal of Bioorganic & Organic Chemistry
Austin Journal of Bioorganic & Organic ChemistryAustin Journal of Bioorganic & Organic Chemistry
Austin Journal of Bioorganic & Organic Chemistry
 
Princeton Real Estate Inventory Grid
Princeton Real Estate Inventory GridPrinceton Real Estate Inventory Grid
Princeton Real Estate Inventory Grid
 
Flipped Classroom project at UPV
Flipped Classroom project at UPVFlipped Classroom project at UPV
Flipped Classroom project at UPV
 
Amazing benefits of cumin.
Amazing benefits of cumin.Amazing benefits of cumin.
Amazing benefits of cumin.
 
Presentacion Pinturas Cobalto
Presentacion Pinturas Cobalto Presentacion Pinturas Cobalto
Presentacion Pinturas Cobalto
 
perbedaan traditional dressing VS modern dressing
perbedaan traditional dressing VS modern dressingperbedaan traditional dressing VS modern dressing
perbedaan traditional dressing VS modern dressing
 
TestingAR XI - Beyond the Basics - Planificación de Testing con Matriz ACC
TestingAR XI - Beyond the Basics - Planificación de Testing con Matriz ACCTestingAR XI - Beyond the Basics - Planificación de Testing con Matriz ACC
TestingAR XI - Beyond the Basics - Planificación de Testing con Matriz ACC
 
Stormont
StormontStormont
Stormont
 

Similar a インデックス使えてる?じぇじぇじぇ!

PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろ
Takuya Tsuchida
 
WebAppDev勉強会 #3 at cafe? IKAGAWA DO
WebAppDev勉強会 #3 at cafe? IKAGAWA DOWebAppDev勉強会 #3 at cafe? IKAGAWA DO
WebAppDev勉強会 #3 at cafe? IKAGAWA DO
Kohei Noda
 

Similar a インデックス使えてる?じぇじぇじぇ! (11)

RandExcel
RandExcelRandExcel
RandExcel
 
DDDハンズオン
DDDハンズオンDDDハンズオン
DDDハンズオン
 
NDBCLUSTERを使わない理由
NDBCLUSTERを使わない理由NDBCLUSTERを使わない理由
NDBCLUSTERを使わない理由
 
テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523
 
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバElasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバ
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろ
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
WebAppDev勉強会 #3 at cafe? IKAGAWA DO
WebAppDev勉強会 #3 at cafe? IKAGAWA DOWebAppDev勉強会 #3 at cafe? IKAGAWA DO
WebAppDev勉強会 #3 at cafe? IKAGAWA DO
 
Devsの常識、DBAは非常識
Devsの常識、DBAは非常識Devsの常識、DBAは非常識
Devsの常識、DBAは非常識
 
Sql server これだけはやっておこう 最終版
Sql server これだけはやっておこう 最終版Sql server これだけはやっておこう 最終版
Sql server これだけはやっておこう 最終版
 
Sql database でも使えるほにゃらら
Sql database でも使えるほにゃららSql database でも使えるほにゃらら
Sql database でも使えるほにゃらら
 

Más de Takuto Matsuu

「Cactiがいいね」と君が言ったから六月六日はv6記念日なので嫌いにならないでください
「Cactiがいいね」と君が言ったから六月六日はv6記念日なので嫌いにならないでください「Cactiがいいね」と君が言ったから六月六日はv6記念日なので嫌いにならないでください
「Cactiがいいね」と君が言ったから六月六日はv6記念日なので嫌いにならないでください
Takuto Matsuu
 
今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて
Takuto Matsuu
 
僕と契約してセキュアなインフラエンジニアになってよ 〜Gnukのススメ〜
僕と契約してセキュアなインフラエンジニアになってよ 〜Gnukのススメ〜僕と契約してセキュアなインフラエンジニアになってよ 〜Gnukのススメ〜
僕と契約してセキュアなインフラエンジニアになってよ 〜Gnukのススメ〜
Takuto Matsuu
 
俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない
Takuto Matsuu
 

Más de Takuto Matsuu (11)

「Cactiがいいね」と君が言ったから六月六日はv6記念日なので嫌いにならないでください
「Cactiがいいね」と君が言ったから六月六日はv6記念日なので嫌いにならないでください「Cactiがいいね」と君が言ったから六月六日はv6記念日なので嫌いにならないでください
「Cactiがいいね」と君が言ったから六月六日はv6記念日なので嫌いにならないでください
 
JINS PC買ってみた
JINS PC買ってみたJINS PC買ってみた
JINS PC買ってみた
 
今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて
 
Facebookアプリ雑感
Facebookアプリ雑感Facebookアプリ雑感
Facebookアプリ雑感
 
僕と契約してセキュアなインフラエンジニアになってよ 〜Gnukのススメ〜
僕と契約してセキュアなインフラエンジニアになってよ 〜Gnukのススメ〜僕と契約してセキュアなインフラエンジニアになってよ 〜Gnukのススメ〜
僕と契約してセキュアなインフラエンジニアになってよ 〜Gnukのススメ〜
 
俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない
 
タイル型ウィンドウマネージャawesomeのススメ
タイル型ウィンドウマネージャawesomeのススメタイル型ウィンドウマネージャawesomeのススメ
タイル型ウィンドウマネージャawesomeのススメ
 
タイル型ウィンドウマネージャのススメ
タイル型ウィンドウマネージャのススメタイル型ウィンドウマネージャのススメ
タイル型ウィンドウマネージャのススメ
 
Twitter botのレシピ
Twitter botのレシピTwitter botのレシピ
Twitter botのレシピ
 
日本タイル型ウィンドウマネージャ推進委員会配布チラシ
日本タイル型ウィンドウマネージャ推進委員会配布チラシ日本タイル型ウィンドウマネージャ推進委員会配布チラシ
日本タイル型ウィンドウマネージャ推進委員会配布チラシ
 
recipetter開発秘話
recipetter開発秘話recipetter開発秘話
recipetter開発秘話
 

Último

Último (10)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

インデックス使えてる?じぇじぇじぇ!