Yakstは、海外の役立つブログ記事などを人力で翻訳して公開するプロジェクトです。
11年弱前投稿 修正あり

MySQLを使ったアプリケーションを作るエンジニアが知るべきMySQLの内部構造とは?

MySQLを使ったアプリケーションを作るエンジニアが知るべきMySQLの内部構造について、データベースコンサルティング会社PalominoDBを経営するLaine Campbell氏による回答。MySQLを知るためには何をポイントに学習すればよいのかがよくわかる、DBAや開発者にとっても役立つ内容。

原文
Laine Campbell's answer to MySQL: What are some of the MySql internals every software engineer building applications using MySql should know? - Quora (English)
原文ライセンス
Quora license
翻訳依頼者
D98ee74ffe0fafbdc83b23907dda3665
翻訳者
D98ee74ffe0fafbdc83b23907dda3665 doublemarket
原著者への翻訳報告
未報告


1. ストレージエンジン

ストレージエンジンと、永続性、ロック機構、トランザクション処理の振る舞いや分離レベルといったストレージエンジンの基礎となる動きについての理解なしに、MySQL自体やモデルデータのコードをいじるべきでない。それに加えて、InnoDBのクラスタ化されたプライマリキーや、MyISAMの全文検索インデックスのようなコア要素も、極めて重要な情報だ。

2. インデックスのコンセプト

特に以下のような点について。

  • カバリングインデックス
  • 連結インデックス
  • インデックスを使ったソートの最適化
  • varchar型やレンジの広いスキャン(日付型やint型)に対するインデックスのパフォーマンス影響
  • カーディナリティの仕組みと、なぜそれが重要なのか
  • クエリヒントがなぜ必要なのかと、それがどのように徐々に問題になってくるのか
  • ワイルドカードとフルテキスト

3. データタイプ

  • 正しくintegerのタイプを選ぶことの効率性、signedとunsignedの違い
  • varcharより固定長charを使った方が適している場合
  • int型、varchar型、enum型、char型それぞれに対するパフォーマンスの影響
  • textとblob型のパフォーマンスとストレージの特徴
  • varchar(255)が単なる無精であること
  • intの定義、表示と保存のどちらを取るか

4. 巨大あるいは同時アクセスの多いテーブルのパーティショニング

プルーニングの動き。パーティションのタイプといつどれが適切なのか。たくさんのパーティションがあるテーブルのパフォーマンス影響。

5. トランザクション

長時間続けてはならない。同時アクセスの多いアプリケーションにおいて、更新に対する参照がどのようにロックを引き起こすのか。

6. コネクションプーリングとコネクション管理

7. クエリの動作

explainを使うこと。pt-query-digestのようなツールを組み合わせて、クエリの動作を知るためにプロファイルやクエリのログを取る。それらのクエリが同時アクセスが多かったり巨大なデータセットの場合どのように動くかを知る。

8. ビューとトリガのパフォーマンス影響

9. MySQLの権限とその付与(grant)

10. リレーショナルデータベースに向いている処理・向いていない処理の理解

キャッシュ機構によるレバレッジ、キューイング処理、外部検索、ログの保存先としての使用などなど…(MySQLだけの話ではない!)

11. 機能的なパーティショニング、シャーディング、単一インスタンスの使い分け

12. アーカイブやパージのためのデータ管理戦略

13. プライマリキー、ユニークキーなどの制約

何がよいプライマリキーで何がよくないのか。ユニークキーなどの制約の運用上、パフォーマンス上の影響。

14. 環境への変更の仕組み

オンラインスキーマ変更、レプリケーションに対する影響など。

15. レプリケーションのコンセプト

シリアルで非同期であり、レイテンシがどのように発生するのか、クエリにどのように影響するのかなど。

次の記事
MySQL 5.6での、マルチカラムインデックスとカラムごとのインデックスの比較
前の記事
MySQLのためのLinuxチューニングヒント

Feed small 記事フィード

新着記事Twitterアカウント