Submit Search
MySQL 入門的なはなし
4 likes
2,661 views
Yuya Takeyama
1 of 35
Download now
Downloaded 32 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
More Related Content
KEY
メッチャ役に立つauto_incrementの話
株式会社シャーロック
PDF
PHP と MySQL でカジュアルに MapReduce する (Short Version)
Yuya Takeyama
PDF
データベースをAI開発に活用
ReNom User Group
PDF
PHP と MySQL で 1 カチャカチャカチャ...ッターン! MapReduce (@ニコニコ超会議)
Yuya Takeyama
PPTX
大規模CSVをMySQLに入れる
Shuhei Iitsuka
PDF
MySQL勉強会 インデックス編.2013 08-02
CROOZ, inc.
PPT
20090107 Postgre Sqlチューニング(Sql編)
Hiromu Shioya
PPT
SQLチューニング勉強会資料
Shinnosuke Akita
メッチャ役に立つauto_incrementの話
株式会社シャーロック
PHP と MySQL でカジュアルに MapReduce する (Short Version)
Yuya Takeyama
データベースをAI開発に活用
ReNom User Group
PHP と MySQL で 1 カチャカチャカチャ...ッターン! MapReduce (@ニコニコ超会議)
Yuya Takeyama
大規模CSVをMySQLに入れる
Shuhei Iitsuka
MySQL勉強会 インデックス編.2013 08-02
CROOZ, inc.
20090107 Postgre Sqlチューニング(Sql編)
Hiromu Shioya
SQLチューニング勉強会資料
Shinnosuke Akita
Similar to MySQL 入門的なはなし
(20)
PDF
MySQL Index勉強会外部公開用
CROOZ, inc.
PDF
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
Masahiro Nagano
PDF
JPUGしくみ+アプリケーション勉強会(第20回)
Yoshinori Nakanishi
PDF
pg_trgmと全文検索
NTT DATA OSS Professional Services
PPT
今年こそ始めたい!SQL超入門 MIRACLE Linux Meetup版 0620
Toru Miyahara
PPT
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
Toru Miyahara
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
PDF
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
keki3
PDF
2018年度 若手技術者向け講座 インデックス
keki3
PPTX
Db seminar 20190619
SAKURUG co.
PDF
RailsエンジニアのためのSQLチューニング速習会
Nao Minami
PPT
Online schema change in mysql casual #1(2010/12/11)
Naritoshi Hayashi
PPT
Online schema change in mysql casual #1(2010/12/11)
Naritoshi Hayashi
PDF
Mroongaを使ったときの MySQLの制限との戦い
Naoya Murakami
PPTX
Postgre SQL 9.3 新機能
Yasuo Ohgaki
PDF
[db tech showcase Tokyo 2015] A14:Amazon Redshiftの元となったスケールアウト型カラムナーDB徹底解説 その...
Insight Technology, Inc.
PDF
SQL Server チューニング基礎
Microsoft
PDF
Sql基礎の基礎
Satomi Tsujita
PPTX
Ruby on Rails on MySQL チューニング入門
だいすけ さとう
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
MySQL Index勉強会外部公開用
CROOZ, inc.
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
Masahiro Nagano
JPUGしくみ+アプリケーション勉強会(第20回)
Yoshinori Nakanishi
pg_trgmと全文検索
NTT DATA OSS Professional Services
今年こそ始めたい!SQL超入門 MIRACLE Linux Meetup版 0620
Toru Miyahara
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
Toru Miyahara
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
keki3
2018年度 若手技術者向け講座 インデックス
keki3
Db seminar 20190619
SAKURUG co.
RailsエンジニアのためのSQLチューニング速習会
Nao Minami
Online schema change in mysql casual #1(2010/12/11)
Naritoshi Hayashi
Online schema change in mysql casual #1(2010/12/11)
Naritoshi Hayashi
Mroongaを使ったときの MySQLの制限との戦い
Naoya Murakami
Postgre SQL 9.3 新機能
Yasuo Ohgaki
[db tech showcase Tokyo 2015] A14:Amazon Redshiftの元となったスケールアウト型カラムナーDB徹底解説 その...
Insight Technology, Inc.
SQL Server チューニング基礎
Microsoft
Sql基礎の基礎
Satomi Tsujita
Ruby on Rails on MySQL チューニング入門
だいすけ さとう
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
Ad
More from Yuya Takeyama
(14)
PDF
5分でわかる? 関数型 PHP の潮流
Yuya Takeyama
PDF
Good Parts of PHP and the UNIX Philosophy
Yuya Takeyama
PDF
Reactor Pattern and React
Yuya Takeyama
PDF
PHP と MySQL でカジュアルに MapReduce する
Yuya Takeyama
PDF
PHPUnit でテスト駆動開発を始めよう
Yuya Takeyama
PDF
HashTable と HashDos
Yuya Takeyama
PDF
Proposal for xSpep BDD Framework for PHP
Yuya Takeyama
PDF
Building Development Environment with php-build and phpenv
Yuya Takeyama
PDF
PHPUnit でよりよくテストを書くために
Yuya Takeyama
PDF
Making DSL with []
Yuya Takeyama
PDF
LIMIT 付きで UPDATE を行うと何故怒られるか
Yuya Takeyama
PDF
GOOS #1
Yuya Takeyama
PDF
Ruby 同好会宣言
Yuya Takeyama
ODP
第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)
Yuya Takeyama
5分でわかる? 関数型 PHP の潮流
Yuya Takeyama
Good Parts of PHP and the UNIX Philosophy
Yuya Takeyama
Reactor Pattern and React
Yuya Takeyama
PHP と MySQL でカジュアルに MapReduce する
Yuya Takeyama
PHPUnit でテスト駆動開発を始めよう
Yuya Takeyama
HashTable と HashDos
Yuya Takeyama
Proposal for xSpep BDD Framework for PHP
Yuya Takeyama
Building Development Environment with php-build and phpenv
Yuya Takeyama
PHPUnit でよりよくテストを書くために
Yuya Takeyama
Making DSL with []
Yuya Takeyama
LIMIT 付きで UPDATE を行うと何故怒られるか
Yuya Takeyama
GOOS #1
Yuya Takeyama
Ruby 同好会宣言
Yuya Takeyama
第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)
Yuya Takeyama
Ad
MySQL 入門的なはなし
1.
M yS Q
L 入門的なはなし @yuya_takeyama
2.
今日の趣旨 •主に MySQL 初心者を対象に •手っとり早くレバレッジの効く話を •します
3.
アジェンダ •何故 MySQL 勉強会なのか •
MySQL のアーキテクチャ •インデックスを使うと何故速い? •MySQL の勉強の仕方
4.
アジェンダ •何故 MySQL 勉強会なのか •
MySQL のアーキテクチャ •インデックスを使うと何故速い? •MySQL の勉強の仕方 間に合いませんでした... 検索ワードに nippondanji を追加すれば情報の質が上がるのでオススメ
5.
何故 MySQL 勉強会
なのか
6.
コストパフォーマンス •遅い! というとき問題は大体 DB •
プログラムの改善で 10 倍高速化は 無理でも DB ならザラにある •うっかり作るとトンでもないことに
7.
知識の可搬性 • 他の RDBMS/DBMS にも適用可能 •原理を知ればプログラミング一般にも 適用可能
8.
今まさに MySQL が熱い •NOSQL
ブームに騙されない • RDBMS を使いつつ, NOSQL で最 適化というパターンがほとんど •決済などのクリティカルなデータなら なおさら
9.
MySQL
の アーキテクチャ
10.
http://www.oreilly.de/catalog/9780596101718/toc.html
11.
• 認証 •接続の管理 •ユーザとか
12.
•SQL パーサ •クエリを解析
13.
•クエリ キャッシュ • 使えるときは キャッシュを 使う • 使えない場合 もある
14.
• オプティマイザ (最適化器) •実行計画 •どう検索すれば 速いか?
15.
•ストレージ エンジン •データを格納 • プラッガブル
(自由に選べる) •MySQL の 大きな特徴
16.
クエリキャッシュ • 同じクエリを実行したとき •結果が同じであることが保証されれば •キャッシュから使い回し
17.
キャッシュされないクエリ • NOW() • CURDATE() •RAND() •その他比決定的な関数・値
18.
オプティマイザ •実行計画の最適化を行う •どのインデックスを使うか •どういう順番でテーブルを開くか
19.
オプティマイザに聞いてみよう •SELECT の前に • EXPLAIN
とつけて •実行する •吟味する
20.
悪い例 ----+-------------+--------+------+---------------+------+---------+------+---------+-----------------------------+ id |
select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | ----+-------------+--------+------+---------------+------+---------+------+---------+-----------------------------+ 1 | SIMPLE | person | ALL | NULL | NULL | NULL | NULL | 1679821 | Using where; Using filesort | ----+-------------+--------+------+---------------+------+---------+------+---------+-----------------------------+ 良い例 +----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+ | 1 | SIMPLE | person | const | PRIMARY | PRIMARY | 34 | const | 1 | | +----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+ +----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+ | 1 | SIMPLE | person | range | PRIMARY | PRIMARY | 34 | NULL | 1484 | Using where | +----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+
21.
悪い例 ----+-------------+--------+------+---------------+------+---------+------+---------+-----------------------------+ id |
select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | ----+-------------+--------+------+---------------+------+---------+------+---------+-----------------------------+ 1 | SIMPLE | person | ALL | NULL | NULL | NULL | NULL | 1679821 | Using where; Using filesort | ----+-------------+--------+------+---------------+------+---------+------+---------+-----------------------------+ 良い例 +----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+ | 1 | SIMPLE | person | const | PRIMARY | PRIMARY | 34 | const | 1 | | +----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+ +----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+ | 1 | SIMPLE | person | range | PRIMARY | PRIMARY | 34 | NULL | 1484 | Using where | +----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+ 評価対象の行数
22.
悪い例 ----+-------------+--------+------+---------------+------+---------+------+---------+-----------------------------+ id |
select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | ----+-------------+--------+------+---------------+------+---------+------+---------+-----------------------------+ 1 | SIMPLE | person | ALL | NULL | NULL | NULL | NULL | 1679821 | Using where; Using filesort | ----+-------------+--------+------+---------------+------+---------+------+---------+-----------------------------+ 良い例 +----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+ | 1 | SIMPLE | person | const | PRIMARY | PRIMARY | 34 | const | 1 | | +----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+ +----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+ | 1 | SIMPLE | person | range | PRIMARY | PRIMARY | 34 | NULL | 1484 | Using where | +----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+ インデックスは使われているか
23.
悪い例 ----+-------------+--------+------+---------------+------+---------+------+---------+-----------------------------+ id |
select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | ----+-------------+--------+------+---------------+------+---------+------+---------+-----------------------------+ 1 | SIMPLE | person | ALL | NULL | NULL | NULL | NULL | 1679821 | Using where; Using filesort | ----+-------------+--------+------+---------------+------+---------+------+---------+-----------------------------+ 良い例 +----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+ | 1 | SIMPLE | person | const | PRIMARY | PRIMARY | 34 | const | 1 | | +----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+ +----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+ | 1 | SIMPLE | person | range | PRIMARY | PRIMARY | 34 | NULL | 1484 | Using where | +----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+ 実行時のソートは 発生していないか
24.
どうする?
25.
→ インデックスをつくる
26.
ストレージエンジン •
データの入れ物 • MySQL ではプラッガブル •InnoDB, MyISAM, Memory, Spider, Mroonga... • それぞれ得意・不得意などがある
27.
どれを使うべきか •迷ったら InnoDB が無難 •
トランザクションが使える • ロックが行単位 (MyISAM はテーブルロック) •デフォルトでは MyISAM になって しまうので注意
28.
アーキテクチャまとめ (1) • MySQL は様々なモジュールから成 る •それぞれについて知ることで最適化の ヒントを得ることができる
29.
アーキテクチャまとめ (2) • クエリキャッシュの効く クエリを書こう •インデックスを適切に設定しよう •とりあえず EXPLAIN
を見よう • 迷ったら InnoDB
30.
インデックス を使うと 何故速い?
31.
参考動画
http://academicearth.org/lectures/run-times-and-algorithms-recursion 4:30 あたり ※単純化のために二分探索 (Binary Search) を 取り上げていますが, MySQL では B-Tree によ る探索が使われています (根本的な原理はだいたい 一緒 (のはず (?)))
32.
二分探索木を 体験しよう
(デモ)
33.
適切にインデックスを作ると •予めソートされたデータが作られる • 関係無いレコードを効率よく除外 •検索が速くなる •レコードの挿入・更新時にコスト
34.
Happy MySQL Life!
35.
ご清聴 ありがとう ございました
Download