Mais conteúdo relacionado
Semelhante a 【基礎編】社内向けMySQL勉強会 (20)
【基礎編】社内向けMySQL勉強会
- 1. Copyright © 2013 TriFort, Inc. All Rights Reserved.
MySQL勉強会
〜基礎編〜
技術統轄本部
大谷 祐司
- 2. Copyright © 2013 TriFort, Inc. All Rights Reserved.
MySQL勉強会
TriFortで標準DBとして採用されているMySQL。
基本的な内容から応用的な内容まで、幅広く
お届けしたいと思います。
- 3. Copyright © 2013 TriFort, Inc. All Rights Reserved.
アジェンダ
・MySQLの概要
・バージョンと新機能
・インデックスについて
・知っておきたいSQL
- 5. Copyright © 2013 TriFort, Inc. All Rights Reserved.
世界で一番使われている
オープンソース・データベース
- 6. Copyright © 2013 TriFort, Inc. All Rights Reserved.
MySQLの運営組織
1995年:MySQL ABによってリリース
2008年:サン・マイクロシステムズがMySQL AB買収
2009年:オラクルがサン・マイクロシステムズ買収
現在は、オラクルがMySQLを開発している。
- 7. Copyright © 2013 TriFort, Inc. All Rights Reserved.
MySQLのfork「MariaDB」の台頭
Fedora19がリリース。
デフォルトのDBがMySQLからMariaDBに変更されました。
2013年7月
- 8. Copyright © 2013 TriFort, Inc. All Rights Reserved.
GoogleもMariaDB採用へ
社内データベースにMariaDB 10.0 を採用している。
GoogleがMariaDB Foundationに開発者を派遣。
- 11. Copyright © 2013 TriFort, Inc. All Rights Reserved.
2003年3月
バージョン4.0プロダクション版
リリース
- 12. Copyright © 2013 TriFort, Inc. All Rights Reserved.
・クエリキャッシュ
・バルクインサート
・InnoDBストレージエンジン
・SQL:TRUNCATE文
・SQL:UNION文
・SET文が使えるようになった
・複数テーブルのDELETE/UPDATE
・FOUND_ROWS
- 13. Copyright © 2013 TriFort, Inc. All Rights Reserved.
2004年10月
バージョン4.1プロダクション版
リリース
- 14. Copyright © 2013 TriFort, Inc. All Rights Reserved.
・サブクエリのサポート
・SQL:CREATE TABLE XXX LIKE XXX
・SSL 接続を介したレプリケーション
・SQL:ON DUPLICATE KEY UPDATE
・1度に複数クエリの実行
・GROUP_CONCAT()関数
- 15. Copyright © 2013 TriFort, Inc. All Rights Reserved.
2005年10月
バージョン5プロダクション版
リリース
- 16. Copyright © 2013 TriFort, Inc. All Rights Reserved.
・ストアドプロシージャ
・VARCHARの255文字以上対応
- 17. Copyright © 2013 TriFort, Inc. All Rights Reserved.
2008年11月
バージョン5.1プロダクション版
リリース
- 18. Copyright © 2013 TriFort, Inc. All Rights Reserved.
・テーブルのパーティショニング
・行ベースのレプリケーション
・プラグインAPI
・イベント スケジューラ
・サーバログテーブル
・テーブルスペースのバックアップ(mysqldump)
・INFORMATION_SCHEMAに対する改良
- 19. Copyright © 2013 TriFort, Inc. All Rights Reserved.
2010年12月
バージョン5.5プロダクション版
リリース
- 20. Copyright © 2013 TriFort, Inc. All Rights Reserved.
・標準ストレージエンジンがInnoDBに変更。
・InnoDBの大幅な改善
・準同期レプリケーション
・レプリケーションの改善
・4バイトUTF-8対応
・RANGE/LISパーテショニング
- 21. Copyright © 2013 TriFort, Inc. All Rights Reserved.
2013年2月
バージョン5.6プロダクション版
リリース
- 22. Copyright © 2013 TriFort, Inc. All Rights Reserved.
InnoDB
・インデックス追加/削除がオンラインで可能
・全文検索機能
・.ibdファイルのエクスポート・インポート
・ページサイズの指定(4k/8k/16k)
・memcachedプロトコルでアクセス
・インデックス統計情報の改善
・InnoDBのログサイズ最大が4G⇒512G
・デッドロック検出機能の改善
・SQL:START TRANSACTION READ ONLY
- 23. Copyright © 2013 TriFort, Inc. All Rights Reserved.
レプリケーション
・SLAVEのマルチスレッド化
・GTIDでSLAVEの自動昇格が可能
・SLAVEがクラッシュセーフに。
・遅延レプリケーション
・SLAVEが使用するNICの指定
・バイナリログにチェックサムの付与
- 24. Copyright © 2013 TriFort, Inc. All Rights Reserved.
オプティマイザ
・サブクエリの改善
・UPDATE/DELETE/INSERTなどもexplain可能に
・ORDER BY ... LIMITのパフォーマンス改善
・パーティションの上限が1024⇒8192に増加
・パーティションをテーブル間で移動
・クエリ実行時にパーティションを指定できる
- 26. Copyright © 2013 TriFort, Inc. All Rights Reserved.
質問:インデックスを使うメリットは
何でしょうか?
- 28. Copyright © 2013 TriFort, Inc. All Rights Reserved.
質問:インデックスを使うデメリットは
何でしょうか?
- 29. Copyright © 2013 TriFort, Inc. All Rights Reserved.
答え:更新が遅くなる。
使いすぎるとメモリを圧迫する。
- 30. Copyright © 2013 TriFort, Inc. All Rights Reserved.
インデックスとは何か
メモリに該当レコードの位置を保存して、高速にアクセ
スできるようにしています。
メモリはHDDの10万倍程度早いので、高速な検索を実現し
ています。
- 31. Copyright © 2013 TriFort, Inc. All Rights Reserved.
インデックスの種類
質問:MySQLにはどのようなインデックスが
存在するでしょうか?
- 32. Copyright © 2013 TriFort, Inc. All Rights Reserved.
・PRIMARY KEY
⇒テーブルのレコードを一意に特定
・セカンダリインデックス
⇒PK以外のインデックス
・ユニークインデックス
⇒特定のカラムで同じ値が一度しか出現しな
くなる(NULLは除く)
- 33. Copyright © 2013 TriFort, Inc. All Rights Reserved.
・空間インデックス(SPATIAL)
⇒緯度軽度などの空間情報を扱うのに利用。R-tree。
・FULLTEXT
⇒全文検索用のインデックス。MySQL5.6からInnoDBで
使用可能になりました。
- 34. Copyright © 2013 TriFort, Inc. All Rights Reserved.
100万レコードの検索
⇒全てのレコードを順番に読んで、100万回のレコード
チェックを行う。
インデックスを使用しないと・・
- 35. Copyright © 2013 TriFort, Inc. All Rights Reserved.
ヘッダブロック、ブランチブロックで値を検索し、
リーフブロックでレコードの位置を特定します。
B-tree indexの概要
- 36. Copyright © 2013 TriFort, Inc. All Rights Reserved.
・どのようなキー値でも同一の速度が期待できる。
・大量データでも良いパフォーマンスが期待できる。
・主キーでの検索が非常に高速
・セカンダリインデックスの検索は遅くなる
⇒リーフブロックには主キーの位置が格納
B-tree インデックスの特徴
- 37. Copyright © 2013 TriFort, Inc. All Rights Reserved.
複合インデックスについて
質問:2つ以上のカラムにインデックスを張るとき、
気をつけるポイントは何でしょうか?
- 38. Copyright © 2013 TriFort, Inc. All Rights Reserved.
・どのように検索されるかを考慮する。
A, AB で検索される場合にはA⇒Bの順番。
B, BA で検索される場合にはB⇒Aの順番。
・カーディナリティ(値の分散)を考慮する。
Aが3つのデータ、Bが1000のデータで構成され
ている場合、Bを先に持ってくる。
- 39. Copyright © 2013 TriFort, Inc. All Rights Reserved.
・フィールド値を定数と比較するとき (where name = 'hogehoge')
・フィールド値でJOINするとき (where a.name = b.name)
・フィールド値の範囲を求めるとき (<,>,between)
・LIKE句が文字列から始まるとき (where name like 'hoge%')
・min(),max()
・文字列のプレフィクスを基にしたorder by, groupy by
インデックスが使用されるとき
- 40. Copyright © 2013 TriFort, Inc. All Rights Reserved.
質問:どのインデックスを使用するか指定する方法は?
- 41. Copyright © 2013 TriFort, Inc. All Rights Reserved.
答え:use index 文を使用する。
SELECT * FROM estimates
USE INDEX(IDX_IMPORT, IDX_FSEARCH)
WHERE total>=10000 AND type=1
- 43. Copyright © 2013 TriFort, Inc. All Rights Reserved.
答え:
・適正なインデックスが使用されているか。
・テーブルに対するアクセス方法は適正か(type)
・Extraのチェック(filesort, temporaryに注
意!)
- 46. Copyright © 2013 TriFort, Inc. All Rights Reserved.
答え:バルクinsert
Insert into table_name
values
(AAA, BBB, CCC, DDD),
(AAA, BBB, CCC, DDD),
(AAA, BBB, CCC, DDD)
- 47. Copyright © 2013 TriFort, Inc. All Rights Reserved.
質問:値のdelete-insertを一回で行う方法は?
- 48. Copyright © 2013 TriFort, Inc. All Rights Reserved.
答え:replace into
replace into table_name
values
(AAA, BBB, CCC, DDD)
- 49. Copyright © 2013 TriFort, Inc. All Rights Reserved.
質問:PKにレコードが存在したらupdate, 存在しな
かったらinsertを行う方法は?
- 50. Copyright © 2013 TriFort, Inc. All Rights Reserved.
答え:on duplicate key update
Insert into table_name
values
(AAA, BBB, CCC)
on duplicate key update
column_A=AAA,
column_B=BBB,
column_C=CCC
- 51. Copyright © 2013 TriFort, Inc. All Rights Reserved.
質問:selectしたレコードをロックする方法は?
- 52. Copyright © 2013 TriFort, Inc. All Rights Reserved.
答え:select for update
select for update from table_name where
id=1;
⇩
commit;
- 54. Copyright © 2013 TriFort, Inc. All Rights Reserved.
答え:SQL_NO_CACHE
select SQL_NO_CACHE from table_name
where id=1;
- 55. Copyright © 2013 TriFort, Inc. All Rights Reserved.
質問:PKが同じレコードの重複登録エラーを
無視して高速にINSERTする方法は?
- 56. Copyright © 2013 TriFort, Inc. All Rights Reserved.
答え:INSERT IGNORE INTO
Insert ignore into table_name
values
(AAA, BBB, CCC)
- 57. Copyright © 2013 TriFort, Inc. All Rights Reserved.
質問:insertされたauto_increment値の取得
方法
- 59. Copyright © 2013 TriFort, Inc. All Rights Reserved.
質問:selectの結果で重複している行を除外する
- 60. Copyright © 2013 TriFort, Inc. All Rights Reserved.
答え:DISTINCT
select distinct AAA from
table_name
- 61. Copyright © 2013 TriFort, Inc. All Rights Reserved.
勉強会は以上になります。
ご清聴ありがとうございました。