マスターしなければならないデータベース面接の質問 25 個をご存知ですか?

目次

1. データインデックスを使用するとなぜ効率が向上するのですか?

2. B+ ツリー インデックスとハッシュ インデックスの違いは何ですか?

3. ハッシュインデックスの利点は何ですか?

4. ハッシュインデックスが適用できないシナリオはありますか?

5. テーブルパーティショニングとは何ですか?

6. テーブルパーティションとサブテーブルの違いは何ですか?

7. テーブルパーティショニングの利点は何ですか?

8. MVCC 同時実行制御における 2 種類の読み取り操作は何ですか?

9. 行レベルのロックの利点は何ですか?

10. 行レベルのロックの欠点は何ですか?

11. MySQLの最適化?

12. キーとインデックスの違いは何ですか?

13. MySQL における MyISAM と InnoDB の違いは何ですか?

14. データベーステーブル作成時の注意点は何ですか?

  1>、フィールド名とフィールド構成の合理性

  2>、システム特殊フィールドの処理と完了後の提案

  3>、テーブル構造の合理的な構成

  4>、その他の提案

15. ストアド プロシージャ? 長所と短所は何ですか?

16. インデックスとは何ですか? 役割とメリット・デメリットは何ですか?

17. トランザクションとは何ですか?

18. データベースの楽観的ロックと悲観的ロックとは何ですか?

19. インデックス クエリによってクエリのパフォーマンスが向上しますか? なぜ?

20. ドロップ、削除、切り捨ての違いについて簡単に説明しますか?

21. ドロップ、削除、切り捨てはどのようなシナリオで使用されますか?

22. スーパーキー、候補キー、主キー、外部キーとは何ですか?

23. ビューとは何ですか? また、ビューの使用シナリオは何ですか?

24. 3 つのパラダイムとは何ですか?

25. 4 つの分離レベルとは何ですか?


1. データインデックスを使用するとなぜ効率が向上するのですか?

  • データ インデックスの格納には順序があります。

  • 順序付けされた場合、インデックスを介してデータをクエリする場合、インデックス レコードを走査する必要はありません。

  • 極端な場合には、データ インデックスのクエリ効率はバイナリ メソッドのクエリ効率となり、log2(N) に近くなります。

2.  B+ ツリー インデックスとハッシュ インデックスの違いは何ですか?

B+ ツリーはバランスのとれたマルチフォーク ツリーです。ルート ノードから各リーフ ノードまでの高さの差は 1 を超えず、次の図に示すように、同じレベルのノード間にはポインタがあり、順序付けされています。

ハッシュインデックスは、特定のハッシュアルゴリズムを使用してキー値を新しいハッシュ値に変換します。検索の際、B+ツリーのようにルートノードからリーフノードまで段階的に検索する必要はありません。必要なハッシュアルゴリズムは1つだけです。 、はい、次の図に示すように、順序付けされていません。

3. ハッシュインデックスの利点は何ですか?

同等のクエリの場合、ハッシュ インデックスには絶対的な利点があります (前提条件: 多数のキー値が繰り返されることはありません。多数のキー値が繰り返される場合、ハッシュ インデックスの効率は非常に低くなります。いわゆるハッシュ衝突問題)。

4. ハッシュインデックスが適用できないシナリオはありますか?

  • 範囲クエリはサポートされていません。

  • インデックス付けは並べ替えではサポートされていません。

  • ジョイント インデックスの左端のプレフィックス マッチング ルールはサポートされていません。

5. テーブルパーティションとは何ですか?

テーブルのパーティショニングとは、データベース内のテーブルを、特定のルールに従って管理しやすい複数の小さな部分に分解することを指します。論理的にはテーブルは 1 つだけですが、最下層は複数の物理パーティションで構成されています。

6. テーブルパーティションとサブテーブルの違いは何ですか?

テーブル分割: テーブルを特定のルールに従って複数の異なるテーブルに分解することを指します。たとえば、ユーザーの注文を時間に従って複数のテーブルに記録します。

テーブル パーティショニングとパーティショニングの違いは、パーティショニングでは論理的にテーブルが 1 つだけであるのに対し、テーブル パーティショニングではテーブルが複数のテーブルに分解されることです。

7. テーブルパーティショニングの利点は何ですか?

  • より多くのデータを保存しますパーティション テーブルのデータは、複数のハードウェア デバイスを効率的に使用するために、異なる物理デバイスに分散できます。単一のディスクまたはファイル システムよりも多くのデータを保存できます。
  • E クエリを最適化しますwhere ステートメントにパーティション条件が含まれている場合、クエリの効率を向上させるために 1 つ以上のパーティション テーブルのみをスキャンできます。sum ステートメントと count ステートメントが関係する場合は、複数のパーティションで並列処理し、最終的に結果を要約することもできます。
  • パーティション テーブルは保守が容易です例: 大量のデータをバッチで削除する場合は、パーティション全体をクリアできます。
  • 特定の特別なボトルネックを回避します。たとえば、InnoDB の単一インデックスの相互排他アクセス、システムの i ノード ロック競合などです。

8.  MVCC 同時実行制御における 2 種類の読み取り操作は何ですか?

スナップショット読み取り (スナップショット読み取り): ロックせずに、レコードの表示されているバージョン (おそらく履歴バージョン) を読み取ります (共有読み取りロックのロックは追加されないため、他のトランザクションの書き込みはブロックされません)。

現在の読み取り (currentread): レコードの最新バージョンが読み取られ、現在の読み取りによって返されたレコードは、他のトランザクションが同時にこのレコードを変更しないようにロックされます。

9. 行レベルのロックの利点は何ですか?

  • 多くのスレッドで異なる行がアクセスされる場合、ロックの競合はわずかしか発生しません。
  • ロールバック時の変更はわずかです。
  • 単一行を長時間ロックできます。

より魅力的なコンテンツを入手するには、公式アカウント[Programmer Style]に注目してください!

10. 行レベルのロックの欠点は何ですか?

ページレベルまたはテーブルレベルのロックよりも多くのメモリを使用しますテーブルの大部分に対して使用すると、より多くのロックを取得する必要があるため、ページ レベルまたはテーブル レベルのロックよりも遅くなります。ほとんどのデータに対して GROUP BY 操作を頻繁に実行する場合、またはテーブル全体を頻繁にスキャンする必要がある場合、他のロックよりも大幅に遅くなります。高レベルのロックでは、ロックのコストが行レベルのロックよりも低いため、さまざまなタイプのロックをサポートしてアプリケーションを簡単に調整することもできます。

11.  MySQLの最適化?

  • クエリ キャッシュを有効にしてクエリを最適化します。

  • 選択クエリについて説明します。これは、クエリ ステートメントまたはテーブル構造のパフォーマンスのボトルネックを分析するのに役立ちます。EXPLAIN のクエリ結果からは、インデックスの主キーがどのように使用され、データ テーブルがどのように検索および並べ替えられるかがわかります。

  • データが 1 行しかないときに制限 1 を使用すると、MySQL データベース エンジンは、レコードに一致する次のデータの検索を続行するのではなく、データを見つけた後に検索を停止します。

  • 検索フィールドにインデックスを付けます。

  • VARCHAR の代わりに ENUM を使用してください。

  • プリペアド ステートメント プリペアド ステートメントは、ストアド プロシージャと同様に、バックグラウンドで実行される SQL ステートメントのコレクションです。プリペアド ステートメントを使用すると、パフォーマンスやセキュリティの問題にかかわらず、多くのメリットが得られます。プリペアド ステートメントはバインドした変数の一部をチェックできるため、プログラムを「SQL インジェクション」攻撃から保護できます。

  • 垂直テーブル。

  • 正しいストレージ エンジンを選択してください。

12. キーとインデックスの違いは何ですか?

鍵となるのはデータベースの物理構造です。これには 2 つの意味と機能の層が含まれています。1 つは制約 (制約に焦点を当て、データベースの構造的完全性を標準化する) で、もう 1 つはインデックス (補助クエリに使用されます) です。主キー、一意キー、外部キーなどが含まれます。

インデックスはデータベースの物理構造であり、補助クエリ専用であり、作成時にディレクトリのような構造の別のテーブルスペース (mysql の innodb テーブルスペース) に保存されます。インデックスを分類する場合、プレフィックス インデックス、フルテキスト インデックスなどに分けることができます。

13.  MySQL における MyISAM と InnoDB の違いは何ですか?

  • InnoDB はトランザクションをサポートしますが、MyISAM はサポートしません。
  • InnoDB は外部キーをサポートしますが、MylSAM はサポートしません。外部キーを含む InnoDB テーブルを MYISAM に変換すると失敗します。
  • InnoDB はクラスター化インデックスであり、データ ファイルがインデックスに関連付けられているため、主キーが必要であり、主キーによるインデックス作成の効率が高くなります。
  • InnoDB はテーブルに特定の行数を保存せず、select count(*) from table を実行するときにテーブル全体のスキャンを必要とします。
  • Innodb はフルテキスト インデックス作成をサポートしていませんが、MyISAM はフルテキスト インデックス作成をサポートしており、MyISAM はクエリ効率が高くなります。

14. データベーステーブル作成時の注意点は?

  1>、フィールド名とフィールド構成の合理性

  •  密接に関連していないフィールドを削除します。フィールドの名前付けにはルールと対応する意味が必要です (一部が英語、一部がピンイン、および abc などの不明な意味を持つフィールドではありません)。
  • フィールドの名前付けには略語を使用しないようにしてください (ほとんどの略語はフィールドの意味を明確にできません)。
  • フィールドでは大文字と小文字を混合して使用しないでください (読みやすくするために、複数の英単語をアンダースコアで接続できます)。
  • フィールド名には予約語やキーワードを使用しないでください。
  • フィールド名とタイプの一貫性を保ちます。
  • 数値の種類は慎重に選択し、テキスト フィールドには十分な余白を残してください。

  2>、システム特殊フィールドの処理と完了後の提案

  • 削除マーク(演算子、削除時刻など)を追加します。
  • バージョンメカニズムを確立します。

  3>、テーブル構造の合理的な構成

  • 複数タイプのフィールドの処理は、テーブル内に小さな独立した部分に分解できるフィールドがあるかどうかです (たとえば、人々を男性と女性に分けることができます)。

  • 複数値フィールドの処理により、テーブルが 3 つのテーブルに分割されるため、取得と並べ替えがより規制され、データの整合性が保証されます。

  4>、その他の提案

  • 大きなデータ フィールドの場合、パフォーマンスに影響を与えるために別のテーブルが保存されます (プロファイル フィールドなど)。

  • varchar は長さを動的に割り当て、char の指定された長さは固定されるため、char の代わりに varchar 型を使用します。テーブルに主キーを作成します。主キーのないテーブルの場合は、クエリとクエリに一定の影響を与えます。インデックス定義。

  • テーブル フィールドが null として実行されるのを避けるために、デフォルト値を設定することをお勧めします (たとえば、int 型のデフォルト値は 0 に設定されます)。インデックス クエリでは、効率がすぐにわかります。1 できればインデックスを作成します。一意の非 null フィールドで、多すぎるインデックスは、後の挿入と更新に一定の影響を与えます (実際の状況を考慮して作成されます)。

15. ストアド プロシージャ? 長所と短所は何ですか?

ストアド プロシージャは、プリコンパイルされた SQL ステートメントの一部です。

より単純な理解: ストアド プロシージャは、いくつかの T-SQL ステートメントで構成されるコード ブロックであるレコード セットであると言えます。これらの T-SQL ステートメント コードは、メソッド (単一のテーブルまたは複数のテーブルに追加する) などのいくつかの関数を実装します。テーブルの削除、変更、確認) を実行し、このコード ブロックに名前を付けて、この関数が使用されるときに呼び出します。

  • ストアド プロシージャは、実行効率の高いプリコンパイルされたコード ブロックです。

  • ストアド プロシージャは多数の T_SQL ステートメントを置き換え、ネットワーク トラフィックを削減し、通信速度を向上させることができます。

  • データのセキュリティはある程度確保できます。

より魅力的なコンテンツを入手するには、公式アカウント[Programmer Style]に注目してください!

16. インデックスとは何ですか? 役割とメリット・デメリットは何ですか?

インデックスは、データベース テーブル内の 1 つ以上の列の値を並べ替える構造であり、MySQL が効率的にデータを取得するのに役立つデータ構造です。

このことは、次のように理解することもできます。インデックスは、テーブル内のデータの取得を高速化する方法です。データベースのインデックスは書籍のインデックスと似ています。書籍では、インデックスを使用すると、ユーザーは本全体をめくらなくても、必要な情報をすぐに見つけることができます。データベースでは、インデックスを使用すると、データベース プログラムがデータベース全体をスキャンしなくても、テーブル内のデータをすばやく検索できるようになります。

MySQLデータベースのいくつかの基本的なインデックス タイプ: 共通インデックス、一意のインデックス、主キー インデックス、フルテキスト インデックス

  • インデックスによりデータベースの検索が高速化されます。

  • インデックスにより、挿入、削除、変更などのメンテナンス タスクの速度が低下します。

  • 一意のインデックスにより、データの各行の一意性が保証されます。

  • インデックスを使用すると、クエリ プロセスで最適化ハイダーを使用してシステムのパフォーマンスを向上させることができます。

  • インデックスには物理スペースとデータスペースが必要です。

17. トランザクションとは何ですか?

トランザクションは同時実行制御の基本単位です。いわゆるトランザクションは一連の操作であり、これらの操作は実行されるか実行されないかのいずれかであり、分割できない作業単位です。トランザクションとは、データベースがデータの整合性を保つための単位であり、各トランザクションの終了時にデータの整合性が保たれます。

18. データベースの楽観的ロックと悲観的ロックとは何ですか?

データベース管理システム (DBMS) における同時実行制御のタスクは、複数のトランザクションがデータベース内の同じデータに同時にアクセスするときに、トランザクションの分離と統一性、およびデータベースの統一性が破壊されないようにすることです。

楽観的同時実行制御 (オプティミスティック ロック) と悲観的同時実行制御 (ペシミスティック ロック) は、同時実行制御で使用される主な技術手段です。

  • 悲観的ロック: 同時実行性の競合が発生すると想定して、データの整合性に違反する可能性のあるすべての操作がブロックされます。

  • オプティミスティック ロック: 同時実行性の競合が発生しないことを前提として、操作をコミットするときにのみデータ整合性違反をチェックします。

19. インデックス クエリを使用するとクエリのパフォーマンスが向上しますか? なぜ?

通常、インデックスを使用したデータのクエリはテーブル全体のスキャンよりも高速ですが、そのコストにも注意する必要があります。

インデックスにはストレージと定期的なメンテナンスのためのスペースが必要です。テーブル内でレコードが追加または削除されるか、インデックス列が変更されると、インデックス自体も変更されます。つまり、各レコードの INSERT、DELETE、および UPDATE が変更されます。ディスク I/O の 4 ~ 5 倍の費用がかかります。インデックスには追加のストレージ領域と処理が必要なため、不必要なインデックスによってクエリの応答時間が遅くなります。インデックス クエリを使用してもクエリのパフォーマンスが必ずしも向上するとは限りません。インデックス範囲クエリ (INDEX RANGE SCAN) は機能します。 2 つの場合:

  • 取得範囲に基づいて、一般的なクエリはテーブル内のレコード数の 30% 未満の結果セットを返します。

  • 一意でないインデックスに基づく検索。

20. ドロップ、削除、切り捨ての違いについて簡単に説明しますか?

SQL のdrop、delete、truncate はすべて削除を意味しますが、この 3 つにはいくつかの違いがあります。

  • delete と truncate はテーブルのデータのみを削除し、テーブルの構造は削除しません。

  • 一般的な速度: ドロップ > トランケート > 削除。

  • deleteステートメントは dml であり、この操作はロールバック セグメントに配置され、トランザクションの送信後に有効になります。対応するトリガーが
    ある場合は、実行時にトリガーされます。truncate    、dropは dml、操作はすぐに有効になり、元のデータはロールバックされませんセグメント では、ロールバックできません。操作によってトリガーはトリガーされません

21. ドロップ、削除、切り捨てはどのようなシナリオで使用されますか?

  • テーブルが不要になった場合は、drop を使用します。

  • 一部のデータ行を削除する場合は、where 句を指定してdelete を使用します。

  • テーブルを保持し、すべてのデータを削除する場合は、truncate を使用します

22. スーパーキー、候補キー、主キー、外部キーとは何ですか?

スーパーキー: 関係内のタプルを一意に識別できる属性のセットは、リレーショナル スキーマのスーパーキーと呼ばれます。属性はスーパーキーとして使用でき、複数の属性を組み合わせてスーパーキーとして使用することもできます。スーパーキーには、候補キーと主キーが含まれます。

候補キー: 最小のスーパーキー、つまり冗長な要素を含まないスーパーキーです。

主キー: データベース テーブルに格納されているデータ オブジェクトを一意かつ完全に識別するデータ列または属性の組み合わせ。データ列には主キーを 1 つだけ持つことができ、主キーの値を欠落させることはできません。つまり、NULL 値 (Null) にすることはできません。

外部キー: あるテーブル内に存在する別のテーブルの主キーを、このテーブルの外部キーと呼びます。

23. ビューとは何ですか? また、ビューの使用シナリオは何ですか?

ビューは、物理テーブルと同じ機能を持つ仮想テーブルです。ビューは追加、変更、確認、操作できます。ビューは通常、1 つ以上のテーブルの行または列のサブセットです。ビューを変更しても、基になるテーブルには影響しません。複数テーブルのクエリと比較して、データの取得が容易になります。

  • 一部のフィールドのみが訪問者に公開されるため、ビューである仮想テーブルが構築されます。

  • クエリされたデータはさまざまなテーブルから取得されており、クエリ実行者は統一された方法でクエリを実行したいと考えています。このようにして、複数のテーブルのクエリ結果を結合するビューを作成することもできます。クエリ実行者はビューから直接データを取得するだけで済みます。データソースを考慮せず、異なるテーブルによってもたらされる違い。

24.  3 つのパラダイムとは何ですか?

第一正規形 (1NF) : データベース テーブル内のフィールドはすべて単一の属性であり、それ以上分割することはできません。この 1 つの属性は、整数、実数、文字、論理、日付などの基本タイプで構成されます。

第 2 正規形 (2NF) : データベース テーブル内の候補キー フィールドに対する非キー フィールドの部分的な機能依存性はありません (部分的な機能依存性とは、結合されたキー内の一部のフィールドが非キー フィールドを決定する状況を指します)。つまり、すべての非キー フィールドは、候補キーワードのセットに完全に依存しています。   

第 3 正規形 (3NF) : 第 2 正規形に基づき、データ テーブル内の候補キー フィールドに対する非キー フィールドの伝達関数依存性がない場合、第 3 正規形に準拠します。いわゆる伝達関数の依存性とは、「A→B→C」という決定関係がある場合、Cの伝達関数はAに依存することを意味します。したがって、第 3 正規形を満たすデータベース テーブルには、キー フィールド → 非キー フィールド x → 非キー フィールド y という依存関係があってはなりません。

25.  4 つの分離レベルとは何ですか?

  • Serializable (シリアル化):ダーティ リード、ノンリピータブル リード、ファントム リードの発生を回避できます。

  • リピータブルリード(Repeatable Read):ダーティリードやノンリピータブルリードの発生を回避できます。

  • Read Committed (リードコミット):ダーティリードの発生を回避できます。

  • Read uncommitted (read uncommitted):最低レベルですが、いかなる場合も保証できません。

この記事はこれですべてです。メッセージを残して、データベースの面接で遭遇した質問について話してくれる友人を歓迎します。

より魅力的なコンテンツを入手するには、公式アカウント[Programmer Style]に注目してください!

おすすめ

転載: blog.csdn.net/dreaming317/article/details/129812161