【基礎編】社内向けMySQL勉強会

  • 3,408 views
Uploaded on

社内で行ったMySQL勉強会の資料です。 …

社内で行ったMySQL勉強会の資料です。
コンテンツは下記になります。
・MySQLの概要
・バージョンと新機能
・インデックスについて
・知っておきたいSQL

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,408
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
27
Comments
0
Likes
12

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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
  • 4. Copyright © 2013 TriFort, Inc. All Rights Reserved. MySQLの概要
  • 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に開発者を派遣。
  • 9. Copyright © 2013 TriFort, Inc. All Rights Reserved. MySQLの歴史
  • 10. Copyright © 2013 TriFort, Inc. All Rights Reserved. 1995年5月 最初のバージョンがリリース。
  • 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に増加 ・パーティションをテーブル間で移動 ・クエリ実行時にパーティションを指定できる
  • 25. Copyright © 2013 TriFort, Inc. All Rights Reserved. インデックスの理解
  • 26. Copyright © 2013 TriFort, Inc. All Rights Reserved. 質問:インデックスを使うメリットは 何でしょうか?
  • 27. 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
  • 42. Copyright © 2013 TriFort, Inc. All Rights Reserved. 質問:explain文で見るべき項目は?
  • 43. Copyright © 2013 TriFort, Inc. All Rights Reserved. 答え: ・適正なインデックスが使用されているか。 ・テーブルに対するアクセス方法は適正か(type) ・Extraのチェック(filesort, temporaryに注 意!)
  • 44. Copyright © 2013 TriFort, Inc. All Rights Reserved. 知っておきたいSQL
  • 45. Copyright © 2013 TriFort, Inc. All Rights Reserved. 質問:複数の値を一括でinsertする方法は?
  • 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;
  • 53. Copyright © 2013 TriFort, Inc. All Rights Reserved. 質問:クエリキャッシュを使わない指定方法は?
  • 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値の取得 方法
  • 58. Copyright © 2013 TriFort, Inc. All Rights Reserved. 答え:last_insert_id();
  • 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. 勉強会は以上になります。 ご清聴ありがとうございました。