MYSQL 面接の質問 (1)

小云云
リリース: 2020-09-02 15:47:48
オリジナル
4353 人が閲覧しました

この記事では主に MYSQL 面接の質問 (1) について説明します。お役に立てれば幸いです。

[関連トピックの推奨事項: mysql 面接の質問 (2020)]

1. 高同時実行システムを設計する方法

適切なトランザクション分離レベルを含むデータベースの最適化サーバー負荷バランス

2 ロック最適化戦略

① 読み取りと書き込みの分離② セグメント化されたロック③ ロック保持時間を削減します

④ 複数のスレッドの使用を試みます。の同じメソッドの順序でリソースを取得するなど。これらはすべて状況に依存します。たとえば、ロックの粒度をあまり細かく設定しないと、スレッドがロックと解放を何度も繰り返す可能性があります。大きなロックを 1 つ増やすほど効率は良くありません。この部分

3の基本的な実装原理とインデックスB+

ツリー、最適化された

B+

ツリー

について、インタビュアーと長い間話し合いました。

Main すべてのリーフ ノードの次のリーフ ノードへのポインターを追加します。 したがって、

InnoDB は、ほとんどのテーブルのプライマリ インデックスとしてデフォルトの自動インクリメント主キーを使用することをお勧めします。 4. インデックスが設定されているのに使用できない場合

① 「%」で始まるLIKE文、あいまい一致

② OR文の前後にインデックスが使用されていない③ データの暗黙的な変換型 (varchar が単一引用符で囲まれていない場合、自動的に int 型に変換される可能性があります) 5. SQL ステートメントの最適化

alter による順序の処理方法

1 つの insert に複数回マージしてみるマージなども必要です6

MySQL

以下の4つの項目が大きい順に回答しました。効果という意味ではインパクトがあり、その後はどんどん小さくなっていきます。

① SQL

ステートメントとインデックスの最適化

データベーステーブル構造の最適化

システム構成の最適化ハードウェアの最適化

8. SQL インジェクションの主な特徴 多くの亜種、単純な攻撃、そして大きな害があります

9. SQL インジェクションの主な害

データベースデータの不正操作 Web ページの悪意のある改ざん

システムの私的追加アカウント、またはデータベース ユーザー アカウントです

ウェブページにぶら下がっているトロイの木馬

11. データベースを最適化する方法

MySQL データベースを最適化する 8 つの方法 (古典的な必見) クリックして取得

· 最も適切なフィールド属性を選択し、定義を減らす可能な限りフィールド幅を NOTNULL に設定してください。たとえば、'province' と 'gender' は ENUM に最適です

· サブクエリ の代わりに接続

(JOIN) を使用します。

手動で作成した一時テーブルを置き換えるユニオン(UNION)を申請

トランザクション処理

テーブルをロックしてトランザクション処理を最適化します

· 外部キーに適用、最適化 テーブルをロック

·インデックスを作成

· クエリステートメントを最適化

19. インデックスについて簡単に説明します。 MySQL の主キー、一意のインデックス、および結合インデックスの違い、データベースのパフォーマンス (読み取りと書き込みの両方) にどのような影響がありますか (新浪技術部門)

インデックスは特殊なファイルです (InnoDB データ テーブルのインデックスはテーブル スペースの不可欠な部分です)。これらには、データ テーブル内のすべてのレコードへの参照ポインターが含まれています。
通常のインデックス (キーワード KEY または INDEX によって定義されるインデックス) の唯一のタスクは、データへのアクセスを高速化することです。
通常のインデックスでは、インデックス付きデータ列に重複した値を含めることができます。特定のデータ列に互いに異なる値のみが含まれると判断できる場合は、このデータ列のインデックスを作成するときにキーワード UNIQUE を使用して一意のインデックスとして定義する必要があります。言い換えれば、一意のインデックスによりデータ レコードの一意性が保証されます。
主キーは、テーブル内に 1 つのみ定義できる、レコードを一意に識別するために使用され、キーワード PRIMARY KEY を使用して作成されます。
Index は、結合インデックスである INDEX(columnA, columnB) インデックスなど、複数のデータ列をカバーできます。
インデックスを使用すると、データクエリの速度が大幅に向上しますが、テーブルの挿入、削除、更新の速度は遅くなります。これらの書き込み操作を実行するときにインデックスファイルを操作する必要があるためです。

20. データベースのトランザクションとは何ですか?

トランザクション (トランザクション) は、順序付けられたデータベース操作の集合です。グループ内のすべての操作が成功した場合、トランザクションは成功したとみなされます。1 つの操作だけが失敗した場合でも、トランザクションは成功とは言えません。すべての操作が完了すると、トランザクションはコミットされ、その変更は他のすべてのデータベース プロセスに適用されます。操作が失敗した場合、トランザクションはロールバックされ、トランザクション内のすべての操作の効果はキャンセルされます。 ACID の 4 つの主な特徴は、原子性、分離性、一貫性、耐久性です。

21. XSS 攻撃についてご存知ですか?それを防ぐにはどうすればよいでしょうか?

XSS は、クロスサイト スクリプティング攻撃です。まず、クロスサイト スクリプティングの脆弱性を利用して、攻撃者が作成したスクリプトを特権モードで実行し、次に、安全でない Activex コントロールを使用して悪意のある動作を実行します。
htmlspecialchars() 関数を使用して、送信されたコンテンツをフィルターし、文字列内の特殊記号を具体化します。

22. SQL インジェクションの脆弱性の原因は何ですか?それを防ぐにはどうすればよいでしょうか?

SQL インジェクションの原因: プログラム開発プロセス中に、SQL ステートメントの標準的な記述と特殊文字のフィルタリングに注意を払わなかったために、クライアントがグローバル変数 POST を介して一部の SQL ステートメントを送信できるようになりました。通常の実行の場合は GET。

SQL インジェクションを防ぐ方法:

構成ファイルで magic_quotes_gpc および magic_quotes_runtime 設定を有効にする

実行時にアッドスラッシュを使用するSQL ステートメント QL ステートメント変換

Sql Whenステートメントを作成する場合は、二重引用符と一重引用符を省略しないようにしてください。

SQL ステートメント内のいくつかのキーワードをフィルターで除外します: update、insert、delete、select、*。

データベースのテーブルとフィールドの命名スキルを向上させ、プログラムの特性に従って、推測されにくいいくつかの重要なフィールドに名前を付けます。

Php設定ファイルでregister_globalsをoffに設定し、グローバル変数の登録をオフにします

エラーメッセージを制御し、ブラウザにエラーメッセージを出力せず、エラーメッセージをログファイルに書き込みます

25. リレーショナル データベースの場合、インデックス作成は非常に重要な概念です。インデックス作成に関するいくつかの質問に答えてください:

a)、インデックス作成の目的は何ですか?
データテーブル内の特定の情報に素早くアクセスし、取得速度を向上させます

一意のインデックスを作成して、データベーステーブル内のデータの各行の一意性を確保します。

テーブルとテーブル間の結合を高速化

データの取得にグループ化句と並べ替え句を使用すると、クエリでのグループ化と並べ替えの時間を大幅に短縮できます

b) データベース システムに対するインデックスの悪影響は何ですか?

マイナスの影響:
インデックスの作成と維持には時間がかかり、テーブルが占有する必要があるのはデータ量だけではなく、インデックスが物理領域を占有する必要があるため、この時間も増加します。スペース、各インデックスは物理スペースも占有する必要があります。テーブルの追加、削除、変更時には、インデックスを動的に維持する必要があるため、データのメンテナンス速度が低下します。

c) データテーブルのインデックス付けの原則は何ですか?

最も頻繁に使用されるフィールドにインデックスを作成して、クエリの範囲を絞り込みます。

並べ替える必要がある頻繁に使用されるフィールドにインデックスを作成します

d)、インデックスの作成が適切でない状況はどのような場合ですか?

クエリにほとんど関与しない列や、重複する値が多く含まれる列にインデックスを作成するのは適切ではありません。

一部の特殊なデータ型では、テキストフィールド(text)などのインデックスの作成には適していません。

26 MySQLデータベースのMyISAMとInnoDBの違いを簡単に説明します

違い 他のデータベースと比較して最も重要な機能は、プラグイン テーブル ストレージ エンジンです。ストレージ エンジンはデータベースではなくテーブルに基づいていることに注意してください。

InnoDB と MyISAM の違い:

InnoDB ストレージ エンジン: 主に OLTP (オンライン トランザクション処理、オンライン トランザクション処理) アプリケーション向けで、ACID トランザクション (トランザクションをサポートする BDB の最初のストレージ エンジンは開発を停止しました)。

機能:

· 行ロック設計、外部キーのサポート、トランザクションのサポート、同時実行のサポート、ロック粒度の mvcc 行レベルロックのサポート;

MyISAM ストレージ エンジン: は、主に OLAP (Online Analytical Processing、オンライン分析および処理) アプリケーションのために MySQL によって公式に提供されるストレージ エンジンです。 特徴:
はトランザクションをサポートしません、

ロック粒度は同時挿入のためのテーブルレベルのロックをサポートします、はテーブルの場所とフルテキストインデックスをサポートしますエス。動作速度が速い頻繁に読み書きできない;

27. MySQL の外部結合、内部結合、自己結合の違いを説明します

まず、クロス結合とは何ですか? クロス結合は、クロス結合とも呼ばれます。デカルト積。Any 条件を使用しないことを意味します。あるテーブル内のすべてのレコードと別のテーブル内のすべてのレコードが直接一致します。

内部結合は、条件を満たすレコードが特定の条件に従ってフィルタリングされ、結果セットに表示されません。つまり、内部結合は一致するレコードのみを接続します。
外部結合結果セットには、結合条件を満たす行が含まれるだけでなく、左側のテーブル、右側のテーブル、または両方のテーブルのすべてのデータ行も含まれます
。 3 つの状況は、左外部結合、右外部結合、および完全外部結合と呼ばれます。

左外部結合、左結合とも呼ばれます。左側のテーブルがメインテーブルで、左側のテーブルのすべてのレコードが結果セットに表示されます。右側のテーブルに一致しないレコードについては、依然として結果セットに表示されます。を表示する必要があります。右側の対応するフィールド値は NULL で埋められます。右外部結合 (右結合とも呼ばれます) は、右側のテーブルがメイン テーブルであり、右側のテーブル内のすべてのレコードが結果セットに表示されます。左結合と右結合は交換可能であり、MySQL は現在完全外部結合をサポートしていません。

28. 3 つ以上の MySQL データベース ストレージ エンジンの名前を書き留めます (ヒント: 大文字と小文字は区別しません)

MyISAM、InnoDB、BDB (BerkeleyDB)、マージ、メモリ (ヒープ)、例、フェデレーション、
アーカイブ、CSV、ブラックホール、MaxDB、および十数個のエンジン

33. Myql のトランザクション ロールバック メカニズムの概要

トランザクションは、ユーザー定義のデータベース操作のシーケンスです。これらの操作は実行されるか、まったく実行されないかのいずれかであり、トランザクションのロールバックは、トランザクションによって完了したデータベースの更新操作を取り消すことを指します。

データベース内の 2 つの異なるテーブルを同時に変更する場合、それらがトランザクションでない場合、最初のテーブルが変更されると、2 番目のテーブルの変更プロセス中に例外が発生する可能性があります。現時点では、2 番目のテーブルのみが未変更の状態であり、最初のテーブルは変更されています。そして、トランザクションとして設定すると、1番目のテーブルが変更され、2番目のテーブルが異常に変更されて変更できなくなった場合、1番目のテーブルと2番目のテーブルは未変更の状態に戻ります、これがいわゆるトランザクションのロールバックです

2. SQL 言語にはどのような部分が含まれていますか?各セクションのアクションキーワードは何ですか?

答え: SQL 言語には、データ定義 (DDL)、データ操作 (DML)、データ制御 (DCL)、およびデータ クエリ (DQL) の 4 つの部分が含まれています。

データ定義: テーブルの作成、テーブルの変更、テーブルの削除、インデックスの作成/削除など

データ操作: 選択、挿入、更新、削除、

データコントロール: grant、revoke

データクエリ: select

3. 整合性制約には何が含まれますか?

答え: データの完全性(データの完全性)とは、データの正確性と信頼性を指します。

は、次の 4 つのカテゴリに分類されます:

1) エンティティの整合性: テーブルの各行がテーブル内で一意のエンティティであることを規定します。

2) ドメインの整合性: テーブル内の列が、値の範囲、精度、その他の規制を含む特定のデータ型の制約を満たす必要があることを意味します。

3) 参照整合性: 2 つのテーブルの主キーと外部キーのデータが一貫している必要があり、テーブル間のデータの一貫性が保証され、データベース媒体の広がりにおけるデータ損失や無意味なデータが防止されることを意味します。

4) ユーザー定義の整合性: さまざまなリレーショナル データベース システムでは、アプリケーション環境に応じて特別な制約が必要になることがよくあります。ユーザー定義の整合性は、特定のリレーショナル データベースに対する制約であり、特定のアプリケーションが満たさなければならないセマンティック要件を反映しています。

テーブル関連の制約: 列制約(NOT NULL (非null制約))およびテーブル制約(PRIMARY KEY、外部キー、チェック、UNIQUE)を含みます。

4. トランザクションとは何ですか?そしてその特徴は?

答え: トランザクション: 一連のデータベース操作であり、データベース アプリケーションの基本的な論理単位です。

トランザクション特性:

(1) 原子性: つまり、不可分性、トランザクションはすべて実行されるか、まったく実行されないかのいずれかです。

(2) 一貫性または文字列可能性。トランザクションの実行により、データベースは 1 つの正しい状態から別の正しい状態に変換されます

(3) 分離。トランザクションが正しくコミットされるまでは、トランザクションによるデータの変更を他のトランザクションに提供することはできません。

(4) 永続性。トランザクションが正しく送信されると、トランザクションの送信後に他のエラーが発生した場合でも、トランザクションの処理結果はデー​​タベースに永続的に保存されます。

または、次のように理解してください:

トランザクションは、論理的な作業単位として結合された SQL ステートメントのグループであり、ステートメント操作が失敗すると、操作全体が失敗し、その後の操作も失敗します。操作は操作前の状態にロールバックされるか、操作上にノードが存在します。何かが実行されるか実行されないかを確認するには、トランザクションを使用できます。グループ化されたステートメントがトランザクションと見なされるには、ACID テスト 、つまり原子性、一貫性、分離性、耐久性に合格する必要があります。

5. ロックとは何ですか?

回答: データベースは複数のユーザーが使用する共有リソースです。複数のユーザーが同時にデータにアクセスすると、複数のトランザクションがデータベース内の同じデータに同時にアクセスします。同時操作が制御されていない場合、誤ったデータが読み取られて保存され、データベースの一貫性が破壊される可能性があります。

ロックは、データベースの同時実行制御を実現するための非常に重要なテクノロジです。トランザクションはデータ オブジェクトを操作する前に、まずシステムにロック要求を送信します。ロック後、トランザクションはデータ オブジェクトに対して一定の制御を持ちます。ロックを解放するまでは、他のトランザクションはデータ オブジェクトを更新できません。

基本的なロックの種類: ロックには行レベルのロックとテーブルレベルのロックが含まれます

6. ビューとは何ですか?カーソルとは何ですか?

回答: ビューは、物理テーブルと同じ機能を持つ仮想テーブルです。ビューは、通常、1 つまたは複数のテーブルの行または列のサブセットです。ビューを変更しても、基になるテーブルには影響しません。複数テーブルのクエリよりも簡単にデータを取得できます。

カーソル: クエリ結果セットを単位として効率的に処理します。カーソルをセル内の特定の行に配置して、結果セット内の現在の行から 1 つ以上の行を取得できます。結果セットの現在の行を変更できます。カーソルは通常は使用されませんが、データを 1 つずつ処理する必要がある場合、カーソルは非常に重要です。

7. ストアド プロシージャとは何ですか?何と呼べばいいでしょうか?

回答: ストアド プロシージャは、プリコンパイルされた SQL ステートメントであるため、モジュール設計が可能になるという利点があります。つまり、一度作成するだけで、後でプログラム内で複数回呼び出すことができます。特定の操作で SQL を複数回実行する必要がある場合は、単純な SQL ステートメントを実行するよりもストアド プロシージャを使用した方が高速です。ストアド プロシージャは、コマンド オブジェクトを使用して呼び出すことができます。

8. インデックスの役割は何ですか?そして、その利点と欠点は何ですか?

答え: インデックスは、データベース検索エンジンがデータ取得を高速化するために使用できる特別なクエリ テーブルです。これは現実の本の目次に非常に似ており、本全体をクエリしなくても必要なデータを見つけることができます。インデックスは一意にすることができ、インデックスを作成すると、単一の列または複数の列を指定できます。欠点は、データ入力が遅くなり、データベースのサイズが大きくなることです。

9. 3 つのパラダイムを一般的な方法で理解するにはどうすればよいですか?

答え: 第一正規形: 1NF は属性の原子性制約であり、属性が原子的である必要があり、分解できません。

第二正規形: 2NF はレコードの一意性制約です。レコードには一意の識別子、つまりエンティティの一意性が必要です。

第 3 正規形: 3NF はフィールドの冗長性に関する制約です。つまり、どのフィールドも他のフィールドから派生することはできません。フィールドが冗長でないことが必要です。 。

パラディグマティックデザインの長所と短所:

長所:

データの冗長性を可能な限り削減できるため、更新が高速かつサイズが小さくなります

短所: クエリには複数のテーブルを関連付ける必要があるため、書き込み効率が低下し、読み取り効率が向上し、より困難になりますインデックスの最適化を実行する

非正規化:

利点: テーブルの関連性を減らし、より適切なインデックスの最適化を可能にします

欠点: データの冗長性とデータの異常、データの変更にはさらに多くのものが必要です時間 コストがかかる

10. ベーシックテーブルとは何ですか?ビューとは何ですか?

答え: 基本テーブルは、SQL では独立して存在するテーブルです。リレーションシップはテーブルに相当します。 ビューは、1 つまたは複数のベース テーブルから派生したテーブルです。ビュー自体はデータベースに独立して保存されるのではなく、仮想テーブルです

11. ビューの利点について説明してください。

答え: (1) ビューにより、ユーザーの操作が簡素化されます。(2) ビューにより、ユーザーは複数の観点から同じデータを表示できます。(4) ビューは、データベースにある程度の論理的独立性を提供します。機密データのセキュリティ保護を提供します。

12. NULL とはどういう意味ですか?

答え: 値 NULL は UNKNOWN を表し、「」 (空の文字列) を表しません。 NULL 値と比較すると、NULL 値が生成されます。値を NULL 値と比較して、論理的に答えが得られることを期待することはできません。

NULL判定を行うにはIS NULLを使用します

13. 主キー、外部キー、インデックスの違いは何ですか?

主キー、外部キー、インデックスの違い

定義:

主キー - レコードを一意に識別し、重複することはできず、空にすることはできません

外部キー - - テーブルの外部キーは、別のテーブルの主キーです。 外部キーは重複することができ、null 値になる可能性があります。

インデックス - このフィールドには重複する値はありませんが、null 値を持つことができます。

機能:

主キー - データの整合性を保証するために使用されます

外部キー - 他のテーブルとの接続を確立するために使用されます

インデックス - 以前はクエリのソート速度の向上

番号:

主キー - 主キーは 1 つだけ存在できます

外部キー - テーブルには複数の外部キーを持つことができます

インデックス - テーブルには複数の一意のインデックスを持つことができます

14. テーブル内のフィールドが特定の範囲の値のみを受け入れるようにするには、何を使用できますか?

答え: データベーステーブルで定義されている制限をチェックしてください。この列の値。

トリガーを使用して、データベーステーブルのフィールドが受け入れることができる値を制限することもできますが、この方法ではテーブルにトリガーを定義する必要があり、場合によってはパフォーマンスに影響を与える可能性があります。

15. SQL ステートメントを最適化する方法は何ですか? (いくつか選択してください)

(1) Where 句内: where テーブル間の接続は他の Where 条件より前に記述する必要があり、最大レコード数を除外できる条件は最後に記述する必要があります。 Where 句の .HAVING が最後です。

(2) IN を EXISTS に、NOT IN を NOT EXISTS に置き換えます。

(3) インデックス列での計算の使用を避ける

(4) インデックス列で IS NULL と IS NOT NULL の使用を避ける

(5) クエリを最適化する、試してみるべきですテーブル全体のスキャンを回避するには、まず where と order by に関係する列にインデックスを作成することを検討してください。

(6) where 句内のフィールドの null 値判定を避けるように努めるべきです。そうしないと、エンジンはインデックスの使用を断念し、テーブル全体のスキャンを実行します

(7) where 句の使用を避けるようにしてください。句内のフィールドに対して式操作を実行すると、エンジンはインデックスの使用を断念し、テーブル全体のスキャンを実行します

16. 「相関サブクエリ」と「非相関クエリ」の違いは何ですか。 SQL ステートメントのサブクエリ?

答え: サブクエリ: 他のクエリ内にネストされたクエリが呼び出されます。

サブクエリは内部クエリとも呼ばれ、サブクエリを含むステートメントは外部クエリ(メインクエリとも呼ばれます)と呼ばれます。

すべてのサブクエリは、相関サブクエリと非相関サブクエリの 2 つのカテゴリに分類できます

(1) 非相関サブクエリは、外側のクエリ、サブクエリから独立したサブクエリです。合計 1 回実行され、実行後に値が外部クエリに渡されます。

(2) 該当するサブクエリの実行は、外部クエリのデータに依存します。外部クエリが行を実行するとき、サブクエリは 1 回実行されます。

つまり、非相関サブクエリは相関サブクエリよりも効率的です

17. char と varchar の違いは何ですか?

答え: varchar は固定長型であり、varchar は可変長型です。 それらの違いは次のとおりです:

char(M) 型のデータ列、それぞれの値は M バイトを占めます。特定の長さが M より小さい場合、MySQL は右側にスペース文字を埋め込みます。 (パディングスペース文字は検索操作中に削除されます。) varchar(M) タイプのデータ列では、各値はその長さを記録するのに十分なバイトと 1 バイトのみを占めます (つまり、合計の長さは L+1 バイトです) )。

varchar は次のシナリオに適用できます:

文字列列の最大長は平均の長さよりもはるかに長い 2. 文字列はめったに更新されず、ストレージの断片化が起こりやすい 3. マルチバイト文字セットを使用する文字列を保存するには

Char シナリオ:

おおよその長さの文字列 (md5 値、ID カード、携帯電話番号) を比較的短い長さで保存します (varchar は文字列を記録するために余分なスペースを必要とするため) length) により、更新中にページ分割が発生せず、ストレージの断片化が回避され、より優れた IO パフォーマンスが得られます

18、myisam と innodb の違い。

答え: 簡単な表現:

MyISAM は、頻繁なクエリを使用するアプリケーションに適しており、デッドロックがなく、小規模なデータ、小規模な同時実行に適しています。トランザクションをサポートするストレージ エンジン。適切に設計されている場合は、行ロックです。

ビッグ データに適しています。 と大規模な同時実行性。 19. データテーブルのタイプとは何ですか

答え: MyISAM、InnoDB、HEAP、BOB、ARCHIVE、CSV など。

MyISAM: 完成度が高く、安定していて、管理が簡単で、読みやすいです。一部の関数 (トランザクションなど) はテーブルレベルのロックをサポートしていません。

InnoDB: トランザクション、外部キー、データ行ロックなどの機能をサポートします。多くのスペースを占有し、全文インデックス作成などはサポートされていません。

20. MySQL データベースは公開システムのストレージとして使用され、1 日あたり 50,000 アイテム以上の増加があり、運用とメンテナンスは 3 年間続くと予想されています。

a. 効率を向上させるために、適切に設計されたデータベース構造を設計し、部分的なデータの冗長性を許可し、結合クエリを避けるようにしてください。

b. 適切なテーブル フィールドのデータ型とストレージ エンジンを選択し、インデックスを適切に追加します。

c. mysql ライブラリの読み取りと書き込みはマスターとスレーブで分離されています。

d. 通常のテーブルを見つけて、単一テーブル内のデータ量を減らし、クエリ速度を向上させます。

e。 memcached、apc などのキャッシュ メカニズムを追加します。

f. 頻繁に変更されないページには静的ページを生成します。

g. 効率的な SQL を作成します。たとえば、SELECT * FROM TABEL は SELECT field_1, field_2, field_3 FROM TABLE に変更されます。

21 トラフィックの多い Web サイトの場合、ページ訪問の統計の問題を解決するためにどのような方法を使用しますか?

回答:a. サーバーが現在のトラフィックをサポートできるかどうかを確認します。

b. データベースアクセスを最適化します。

c. 画像のホットリンクなど、リンクへの外部アクセス(ホットリンク)は禁止されています。

d. ファイルのダウンロードを制御します。

e. 異なるホストを使用してトラフィックを分散します。

f. 閲覧統計ソフトウェアを使用して、訪問数を把握し、ターゲットを絞った最適化を実行します。

4. SQL を最適化するには? (学生は次の説明を理解し、その後、自分自身の理解に基づいて一般的な意味を表現できます)

答え:

(1) 正しいストレージ エンジンを選択してください

Take MySQL例として、MyISAM と InnoDB の 2 つのストレージ エンジンが挙げられます。各エンジンには長所と短所があります。

MyISAM は、大量のクエリを必要とする一部のアプリケーションには適していますが、大量の書き込み操作にはあまり適していません。フィールドを更新するだけの場合でも、テーブル全体がロックされ、読み取り操作が完了するまで他のプロセス (読み取りプロセスであっても) が動作できなくなります。さらに、MyISAM は SELECT COUNT(*) などの計算が非常に高速です。

InnoDB の傾向は非常に複雑なストレージ エンジンになり、一部の小規模なアプリケーションでは MyISAM よりも遅くなるでしょう。ただし、「行ロック」をサポートしているため、書き込み操作が多い場合はより優れています。さらに、トランザクションなどのより高度なアプリケーションもサポートします。

(2) フィールドのデータ型を最適化します

列が小さいほど高速になるという原則を覚えておいてください。テーブルに少数の列しかない場合 (ディクショナリ テーブル、構成テーブルなど)、主キーとして INT を使用する理由はありません。MEDIUMINT、SMALLINT、またはそれより小さい TINYINT を使用する方が経済的です。時間を追跡する必要がない場合は、DATETIME よりも DATE を使用する方がはるかに優れています。もちろん、拡張のための十分な余地も残しておく必要があります。

(3) 検索フィールドにインデックスを追加します

インデックスは、必ずしも主キーや唯一のフィールドを意味するわけではありません。テーブル内に常に検索に使用するフィールドがある場合は、検索するフィールドが大きなテキスト フィールドでない限り、そのフィールドにインデックスを作成することをお勧めします。

(4) Select * の使用は避けてください。データベースから読み取られるデータが増えるほど、クエリは遅くなります。また、データベースサーバーとWEBサーバーが独立した2台のサーバーの場合、ネットワーク通信の負荷も大きくなります。データ テーブル内のすべてのフィールドをクエリする場合でも、* ワイルドカード文字を使用しないようにしてください。組み込みのフィールド除外定義を活用すると、より便利になる場合があります。

(5)VARCHARの代わりにENUMを使用してください

ENUM型は非常に高速でコンパクトです。実際には、TINYINT を保持しますが、文字列として表示されます。このようにして、このフィールドを使用して選択リストを作成するのが非常に完璧になります。たとえば、性別、民族、部門、ステータスなどのフィールドの値が限定されており、固定されている場合は、VARCHAR ではなく ENUM を使用する必要があります。

(6) 可能な限り NOT NULL を使用してください

NULL 値を使用する特別な理由がない限り、フィールドは常に NOT NULL にしておく必要があります。 NULL は実際には余分なスペースを必要とするため、比較を行うとプログラムがより複雑になります。 もちろん、これは NULL を使用できないという意味ではありません。現実は非常に複雑なので、NULL 値を使用する必要がある状況が依然として存在します。

(7) 固定長テーブルは高速になります

テーブル内のすべてのフィールドが「固定長」の場合、テーブル全体が「静的」または「固定長」とみなされます。 たとえば、テーブルには VARCHAR、TEXT、BLOB 型のフィールドはありません。これらのフィールドのいずれかを含めている限り、テーブルは「固定長の静的テーブル」ではなくなり、MySQL エンジンは別の方法でテーブルを処理します。

固定長テーブルは、MySQL の検索を高速化するため、パフォーマンスを向上させます。これらの固定長により、次のデータのオフセットの計算が容易になり、読み取りが自然に高速化されます。また、フィールドが固定長でない場合、次のフィールドを検索するたびに、プログラムは主キーを検索する必要があります。

また、固定長テーブルはキャッシュと再構築が簡単です。ただし、唯一の副作用は、固定長フィールドは使用するかどうかに関係なく非常に多くのスペースを必要とするため、固定長フィールドによってスペースが浪費されることです。表22、中中中中


🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 フィールドタイプ 優先順位: 整形 & gt; 日付、時刻 & gt; 、char>varchar& GT;ブロブ、テキスト🎜 🎜🎜🎜🎜🎜 数値型を優先し、次に日付型またはバイナリ型、最後に文字列型を指定します。同じレベルのデータ型では、占有スペースが少ないデータ型を優先する必要があります🎜🎜🎜 🎜🎜23:保存期間🎜🎜🎜🎜D🎜🎜atatime: YYYY-MM-DD HH:MM:SS 形式で保存期間、秒まで正確、8 バイトのストレージ領域を占有、datatime タイプはタイムゾーンとは関係ありません🎜 🎜🎜 🎜T🎜🎜imestamp: タイムスタンプ形式で保存され、1970-1-1 から 2038-1-19 の範囲の 4 バイトを占めます。表示は指定されたタイムゾーンによって異なります。データが変更されると、デフォルトは最初の列に表示されます、タイムスタンプ列の値は自動的に変更できます🎜🎜

Date: (誕生日) は、string.datatime.int を使用して保存するよりも少ないバイト数で済みます。日付と月を保存するために必要なバイト数は 3 バイトだけです。日付と時刻関数を使用して日付を取得することもできます。 Calculate

Time: データの時間部分を保存します

: 日付と時刻のデータを保存するのに文字列型を使用しないでください (通常、文字列型よりも占有容量が少なくなります。 Date 関数を検索およびフィルタリングするときに使用します)

int を使用して日付と時刻を保存することは、タイムスタンプ型を使用する場合ほど良くありません。

関連する推奨事項:

MySQL の面接の質問をいくつかまとめました

以上がMYSQL 面接の質問 (1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート