[MySQL] 37 MySQLデータベースのヒント

ここに画像の説明を挿入

1。概要

転載:MySQLデータベースの37のヒント、後悔しないでください!

運用、保守、開発、テスト、アーキテクトのいずれであっても、データベーステクノロジは必須のアーティファクトです。データベースとMySQLについて何を学びたいですか?

1. MySQLをすばやく習得する方法?
興味を育む

興味は最高の教師です。どんな知識を学んでも、興味は学習効率を大幅に向上させます。もちろん、MySQL 5.6の学習も例外ではありません。

強固な基盤を築く

コンピュータ分野のテクノロジーは基本に重点を置いており、最初はこれに気付かないかもしれませんが、テクノロジーアプリケーションの深化と共に、強固な基盤があってこそ、テクノロジーの道をより速く、さらに進むことができます。MySQLの学習では、SQLステートメントが最も基本的な部分であり、多くの操作はSQLステートメントを介して実装されます。したがって、学習の過程で、読者はより多くのSQLステートメントを記述し、異なる実装ステートメントを使用して同じ機能を完了し、違いを深く理解する必要があります。

時間内に新しい知識を学ぶ

検索エンジンを正しく効果的に使用して、MySQL 5.6に関する多くの関連知識を検索できます。同時に、他の人のアイデアを参考にして問題を解決します。他の人の経験から学び、最新の技術情報をすぐに入手することもできます。

マルチプラクティス

データベースシステムは操作性が高く、より多くの実地操作が必要です。実際の運用の過程で、問題を発見し、その解決方法や考え方を検討することで、実際の戦闘での運用能力を向上させることができます。

2.サーバーのタイプを選択するにはどうすればよいですか?
MySQLサーバー設定ウィンドウの各パラメーターの意味は次のとおりです。
[サーバー構成タイプ]このオプションは、サーバーのタイプを設定するために使用されます。オプションの右側にある下向きボタンをクリックすると、3つのオプションが表示されます。

3つのオプションの具体的な意味は次のとおりです。
開発マシン:このオプションは、一般的なパーソナルデスクトップワークステーションを表します。マシンで複数のデスクトップアプリケーションが実行されているとします。最小限のシステムリソースを使用するようにMySQLサーバーを構成します。

サーバーマシン(サーバー):このオプションはサーバーを表し、MySQLサーバーはFTP、電子メール、Webサーバーなどの他のアプリケーションと共に実行できます。MySQLサーバーは、システムリソースの適切な割合を使用するように構成されています。

専用のMySQLサーバーマシン(専用のMySQLサーバー):このオプションは、MySQLサービスのみを実行するサーバーを表します。他のアプリケーションが実行されていないことを前提としています。MySQLサーバーは、使用可能なすべてのシステムリソースを使用するように設定されています。初心者の場合は、[DevelopmentMachine]オプションを選択することをお勧めします。これにより、システムリソースの使用量が少なくなります。

3.ストレージエンジンの選択方法
次の表に示すように、さまざまなストレージエンジンには、さまざまなニーズを満たすための独自の特性があります。選択するには:

まず、各ストレージエンジンが提供するさまざまな機能を検討する必要があります。コミット、ロールバック、およびクラッシュリカバリ機能にトランザクションセキュリティ(ACID互換)機能を提供し、同時実行制御が必要な場合は、InnoDBが適しています。データテーブルが主にレコードの挿入とクエリに使用される場合、MyISAMエンジンはより高い処理効率を提供できます。データが一時的にのみ保存される場合、データ量は大きくなく、高度なデータセキュリティは必要ない場合、データをメモリに保存することを選択できます。 MySQLのメモリエンジンは、このエンジンを一時テーブルとして使用して、クエリの中間結果を格納します。INSERT操作とSELECT操作しかない場合は、アーカイブエンジンを選択できます。アーカイブストレージエンジンは、並行処理の高い挿入操作をサポートしていますが、トランザクションに対して安全ではありません。アーカイブストレージエンジンは、アーカイブデータの保存に非常に適しています。たとえば、アーカイブエンジンを使用してログ情報を記録できます。

使用するエンジンはニーズに応じて柔軟に選択する必要があります。データベース内の複数のテーブルでさまざまなエンジンを使用して、さまざまなパフォーマンスや実際のニーズに対応できます。

適切なストレージエンジンを使用すると、データベース全体のパフォーマンスが向上します。

4.デフォルトのストレージエンジンを確認するにはどうすればよいですか?
SHOW ENGINESステートメントを使用して、デフォルトのストレージエンジンを含む、システム内のすべてのストレージエンジンを表示します。現在のデータベースシステムには5つのストレージエンジンがあり、デフォルトはMyISAMであることがわかります。直接的な方法を使用して、デフォルトのストレージエンジンを表示することもできます。実行結果は、現在のデフォルトのストレージエンジンがMyISAMであることを直接示しています。

5.
テーブルを削除するときは注意してください。テーブル削除操作を実行すると、テーブルの定義とテーブル内のデータが一緒に削除され、MySQLは削除操作の実行時に確認を求めません。したがって、削除操作を実行するときは注意が必要です。テーブルを削除する前に、テーブル内のデータをバックアップして、操作エラーが発生したときにデータを復元して、元に戻せない結果を回避できるようにすることをお勧めします。

同様に、ALTER TABLEを使用して基本的なテーブル変更操作を実行する場合、データベースの変更は元に戻せないため、操作プロセスを実行する前にデータの完全なバックアップがあることを確認する必要があります。不要なフィールドを追加すると、次のことができます。それを削除します。同様に、必要な列を削除すると、その列の下のすべてのデータが失われます。

6.すべてのテーブルに主キーはありますか?
すべてのテーブルに主キーが必要なわけではありません。通常、複数のテーブルを接続する場合は、主キーを使用する必要があります。したがって、各テーブルの主キーを設定する必要はありません。場合によっては、主キーを使用しない方がよいこともあります。

7.ストレージエンジンをテーブルごとに任意に選択できますか?
外部キー制約(FOREIGN KEY)は、エンジン間で使用できません。MySQLは複数のストレージエンジンをサポートします。各テーブルは異なるストレージエンジンを指定できますが、注意が必要です。テーブルを外部キーに関連付ける必要がある場合は、データの参照整合性を保証するために外部キー制約が使用されますが、異なるストレージエンジンの場合、これらのテーブル間に外部キー制約を作成できません。したがって、ストレージエンジンの選択は完全に恣意的ではありません。

8. AUTO_INCREMENT制約のあるフィールド値は1から始まりますか?
MySQLのデフォルトでは、AUTO_INCREMENTの初期値は1です。新しいレコードが追加されるたびに、フィールド値は自動的に1ずつ増加します。自動インクリメント属性(AUTO_INCREMENT)を設定する場合、最初に挿入されたレコードの自動インクリメントフィールドの値を指定して、新しく挿入されたレコードの自動インクリメントフィールド値が初期値から増加するようにすることもできます(tb_emp8に最初のレコードを挿入するなど)。 、同時に5のid値を指定すると、挿入されたレコードのid値は6から増加します。一意の主キー制約を追加する場合、属性を自動的に追加するようにフィールドを設定する必要があることがよくあります。

9. TIMESTAMPとDATATIMEの違いは
、ストレージバイトとサポートの範囲は別として、最大の違いが1つあります。DATETIME は、実際に入力された形式で日付データを格納します。つまり、入力した内容が格納されます。タイムゾーンとは何の関係もありません。TIMESTAMP値はUTC(Universal Standard Time)形式で格納され、現在のタイムゾーンは格納中に変換され、取得時に現在のタイムゾーンに変換されます。つまり、クエリを実行すると、表示される時間の値は現在のタイムゾーンによって異なります。

10.データ型を選択する方法とテクニックは何ですか?
MySQLには多数のデータ型が用意されています。ストレージを最適化してデータベースのパフォーマンスを向上させるには、どのような場合でも最も正確な型を使用する必要があります。つまり、列の値を表すことができるすべてのタイプの中で、このタイプは最小のストレージを使用します。

整数と浮動小数点

小数部が不要な場合は整数を使用してデータを保存し、小数部を表す必要がある場合は浮動小数点型を使用します。浮動小数点データ列の場合、格納された値は、列で定義された小数点以下の桁に丸められます。たとえば、列の値の範囲が1〜99999の場合、整数を使用する場合はMEDIUMINT UNSIGNEDが最適なタイプであり、小数を格納する必要がある場合はFLOATタイプを使用します。浮動小数点型には、FLOAT型とDOUBLE型があります。DOUBLEタイプはFLOATタイプよりも精度が高いため、より高いストレージ精度が必要な場合は、DOUBLEタイプを選択する必要があります。

浮動小数点と固定小数点

固定小数点DECIMALに対する浮動小数点数FLOATおよびDOUBLEの利点は、特定の長さで、浮動小数点数がより大きなデータ範囲を表すことができることです。ただし、浮動小数点数はエラーが発生しやすいため、精度要件が比較的高い場合は、DECIMALを使用して格納することをお勧めします。DECIMALはMySQLに文字列として格納され、通貨などの高精度を必要とするデータを定義するために使用されます。データ移行では、float(M、D)は非標準のSQL定義であり、データベース移行は問題を引き起こす可能性があるため、このように使用しないことをお勧めします。他の2つの浮動小数点数も、減算および比較演算の実行時に問題が発生しやすいため、計算を実行するときは注意が必要です。数値比較を実行する場合は、DECIMAL型を使用するのが最適です。

日時タイプ

MySQLには、YEARやTIMEなど、さまざまな種類の日付と時刻に関する多くのデータ型があります。年のみを記録する必要がある場合は、YEARタイプを使用できます。時刻のみを記録する場合は、TIMEタイプのみを使用する必要があります。日付と時刻を同時に記録する必要がある場合は、TIMESTAMPまたはDATETIMEタイプを使用できます。TIMESTAMP列の値の範囲はDATETIMEの値の範囲よりも小さいため、より大きなストレージ範囲の日付にはDATETIMEを使用することをお勧めします。TIMESTAMPには、DATETIMEにはない属性もあります。デフォルトでは、レコードが挿入されてもTIMESTAMPカラムの値が指定されていない場合、MySQLはTIMESTAMPカラムを現在の時刻に設定します。したがって、レコードを挿入して現在の時刻を挿入する必要がある場合は、TIMESTAMPを使用すると便利です。TIMESTAMPは、DATETIMEよりもスペースが効率的です。

CHARとVARCHARの機能と選択

CHARとVARCHARの違い:
CHARは固定長文字、VARCHARは可変長文字です。CHARは挿入されたデータの末尾のスペースを自動的に削除し、VARCHARは末尾のスペースを削除しません。

CHARは固定長であるため、処理速度はVARCHARよりも高速ですが、デメリットはストレージスペースを浪費することです。したがって、ストレージはそれほど多くありませんが、速度が必要な場合はCHARタイプを使用でき、代わりにVARCHARタイプを使用できます。

CHARおよびVARCHARの選択に対するストレージエンジンの影響:
MyISAMストレージエンジンの場合:可変長データ列の代わりに固定長データ列を使用するのが最善です。これにより、テーブル全体が静的になるため、データの取得が高速になり、スペースが時間の間交換されます。

InnoDBストレージエンジンの場合:可変長データ列を使用します。これは、InnoDBデータテーブルのストレージフォーマットでは固定長と可変長が区別されないため、CHARを使用することは必ずしもVARCHARを使用するよりも優れているとは限りませんが、VARCHARは実際の長さに応じて格納されるためです。スペースを節約できるため、ディスクI / Oとデータストレージ全体に適しています。

ENUMおよびSET

ENUMは単一の値のみを取ることができ、そのデータリストは列挙されたコレクションです。その正当な値のリストは、最大65,535のメンバーを許可します。したがって、複数の値の1つを選択する必要がある場合は、ENUMを使用できます。例:性別フィールドはENUMタイプとして定義するのに適しており、「男性」または「女性」から一度に取得できる値は1つだけです。SETは複数の値を取ることができます。その正当な値のリストは、最大64のメンバーを許可します。

空の文字列も有効なSET値です。複数の値を取得する必要がある場合は、SET型を使用するのが適切です。たとえば、個人の趣味を保存するには、SET型を使用するのが最適です。ENUMとSETの値は文字列の形式で表示されますが、MySQLは内部的に数値の形式で格納します。

BLOBとTEXT

BLOBはバイナリ文字列、TEXTは非バイナリ文字列で、どちらも大容量の情報を格納できます。BLOBは主に画像、オーディオ情報などを保存しますが、TEXTはプレーンテキストファイルのみを保存できます。2つの目的は区別する必要があります。ここをクリックして、BATインタビューに対するMYSQLインタビューの55の質問をまとめてください。

11. MySQLで特殊文字を使用するには?
単一引用符( ')、二重引用符( ")、バックスラッシュ()などの記号。これらの記号を直接入力してMySQLで使用することはできません。そうしないと、予期しない結果が生成されます。MySQLでは、これらの特殊文字は変換と呼ばれます。入力するときはバックスラッシュ( '\')で始める必要があるため、一重引用符と二重引用符を使用する場合は(\ ')または( ")を入力し、バックスラッシュを入力する場合は()を入力する必要があります。その他の特殊文字には、キャリッジリターン(\ r)、ラインフィード(\ n)、タブ(\ tab)、バックスペース(\ b)などがあります。これらの特殊文字をデータベースに挿入するときは、エスケープする必要があります。

12.ファイルをMySQLに保存できますか?
MySQLのBLOBおよびTEXTフィールドタイプは、大量のデータを含むファイルを保存できます。これらのデータタイプを使用して、画像、サウンド、またはWebページやドキュメントなどの大容量のテキストコンテンツを保存できます。BLOBまたはTEXTを使用すると大量のデータを格納できますが、これらのフィールドを処理すると、データベースのパフォーマンスが低下します。必要がない場合は、ファイルのみが保存されるパスを選択できます。

13. MySQLで大文字と小文字を区別する文字列比較を実行するにはどうすればよいですか?
Windowsプラットフォームでは、MySQLは大文字と小文字を区別しないため、文字列比較関数は大文字と小文字を区別しません。大文字と小文字を区別する比較を実行する場合は、文字列の前にBINARYキーワードを追加できます。たとえば、デフォルトでは、 'a' = 'A'の戻り結果は1です。BINARYキーワードを使用すると、BINARY'a '=' A 'の結果は0になります。大文字と小文字を区別する場合は、' a 'と' A '同じではありません。

14.日付と時刻の値から年、月、日などの日付または時刻の値を取得するにはどうすればよいですか?
MySQLでは、日付と時刻の値はデータテーブルに文字列として保存されるため、文字列関数を使用して日付と時刻の値のさまざまな部分をインターセプトできます。たとえば、dtという名前のフィールドの値は「2010-10-01 12:00」です。 :30 "、年の値のみを取得する必要がある場合は、LEFT(dt、4)を入力できるため、文字列の左側から長さ4の部分文字列、つまりYEAR部分の値を取得します。月の値を取得する場合は、次のように入力できます。 MID(dt、6,2)は、文字列の6番目の文字から始まり、長さ2の部分文字列は、正確にdtの月の値です。同様に、読者は他の日時の位置に基づいて対応する値を計算して取得できます。

15.デフォルトの文字セットを変更するにはどうすればよいですか?
CONVERT()関数は、指定された文字列のデフォルトの文字セットを変更します。最初の章では、GUIのグラフィカルインストールおよび構成ツールを使用したMySQLのインストールおよび構成について読者に説明します。手順の1つは、MySQLのデフォルトの文字セットを選択することです。ただし、文字セットを変更するだけの場合は、構成プロセスを再度実行する必要はありません。ここでは、構成ファイルを変更するのが簡単な方法です。Windowsでは、MySQL設定ファイルの名前はmy.iniで、MySQLインストールディレクトリの下にあります。構成ファイルのdefault-character-setおよびcharacter-set-serverパラメーター値を変更し、それらをgbk、gb2312、latinlなどの目的の文字セット名に変更します。変更後、MySQLサービスを再起動して有効にします。読者は、比較のために文字セットを変更するときに、SHOW VARIABLES LIKE'character_set_°% ';コマンドを使用して現在の文字セットを表示できます。

16. DISTINCTをすべての列に適用できますか?
クエリ結果で、列を降順で並べ替える必要がある場合は、DESCを使用できます。このキーワードは、列を降順でのみ並べ替えることができます。たとえば、複数の列を降順でソートするには、各列の列名の後にDESCキーワードを追加する必要があります。

DISTINCTとは異なり、DISTINCTを部分的に使用することはできません。つまり、DISTINCTキーワードは、最初に指定された列だけでなく、すべての列に適用されます。たとえば、3つのフィールドs_id、f_name、f_priceをクエリします。異なるレコードのこれら3つのフィールドの合計値が異なる場合、すべてのレコードがクエリされます。

17. ORDER BYはLIMITと混在できますか?
ORDER BY句を使用するときは、FROM句の後にあることを確認する必要があります。LIMITを使用する場合は、ORDER BYの後にある必要があります。句の順序が正しくない場合、MySQLはエラーメッセージを生成します。

18.引用符はいつ使用するのですか?
クエリを実行すると、WHERE句で使用される条件が表示され、一部の値は単一引用符で追加され、一部の値は追加されません。単一引用符は、文字列を修飾するために使用されます。値を文字列型の列と比較する場合は、引用符を修飾する必要があります。それを使用して値と比較する場合は、引用符を使用する必要はありません。

19. WHERE句で括弧を使用する必要がありますか?
ANDおよびOR演算子でWHERE句を使用する場合は常に、操作の順序を明確にするために括弧を使用する必要があります。条件が多い場合は、計算順序を決定できても、デフォルトの計算順序ではSQL文がわかりにくい場合があるため、括弧を使用して演算子の順序を明確にすることをお勧めします。

20.テーブルを更新または削除するときにWHERE句を指定する必要がありますか?
前の章で見たように、すべてのUPDATEおよびDELETEステートメントはWHERE句で条件を指定します。WHERE句を省略した場合、UPDATEまたはDELETEはテーブル内のすべての行に適用されます。

したがって、本当にすべてのレコードを更新または削除するつもりでない限り、WHERE句のないUPDATEまたはDELETEステートメントの使用に注意を払う必要があります。不可逆な結果を避けるために、SELECTステートメントを使用して、テーブルを更新および削除する前に削除する必要があるレコードを確認することをお勧めします。ここをクリックして、BATインタビューに対するMYSQLインタビューの55の質問をまとめてください。

21.インデックスはデータベースのパフォーマンスにとって非常に重要ですが、どのように使用すべきですか?
データベースに適切なインデックスを選択することは複雑な作業です。インデックス列が少ない場合は、必要なディスク容量とメンテナンスオーバーヘッドが少なくなります。大きなテーブルに複数の複合インデックスが作成されると、インデックスファイルはすぐに拡張されます。

一方、インデックスが多いほど、より多くのクエリをカバーできます。最も効果的なインデックスを見つけるには、いくつかの異なるデザインを実験する必要がある場合があります。データベースのアーキテクチャやアプリケーションの設計に影響を与えることなく、インデックスを追加、変更、削除できます。したがって、最良のインデックスを作成するには、複数の異なるインデックスを試す必要があります。

22.短いインデックスを使用するようにしてください。
文字列タイプのフィールドにインデックスを付ける場合、可能であればプレフィックス長を指定する必要があります。たとえば、CHAR(255)列がある場合、複数値が最初の10文字または30文字内で一意であれば、列全体にインデックスを付ける必要はありません。短いインデックスは、クエリの速度を向上させるだけでなく、ディスク領域を節約し、I / O操作を減らすこともできます。

23. MySQLのストアドプロシージャと関数の違いは何ですか?
本質的に、これらはすべてストアドプロシージャです。関数は、returnステートメントを通じて単一の値またはテーブルオブジェクトのみを返すことができます。ストアドプロシージャは、returnの実行を許可されていませんが、outパラメーターを通じて複数の値を返すことができます。関数には多くの制限があり、一時テーブルは使用できない、テーブル変数しか使用できない、一部の関数は使用できないなどがあります。ストアドプロシージャの制限は比較的小さいです。関数はSQLステートメントに埋め込むことができ、SELECTステートメントのクエリステートメントの一部として呼び出すことができます。ストアドプロシージャは通常、独立した部分として実行されます。

24.ストアドプロシージャのコードを変更できますか?
現在、MySQLは既存のストアドプロシージャコードを変更しません。ストアドプロシージャを変更する必要がある場合は、DROPステートメントを使用して削除し、コードを書き直すか、新しいストアドプロシージャを作成する必要があります。

25.ストアドプロシージャの実行中に他のストアドプロシージャを呼び出すことはできますか?
ストアドプロシージャには、一連のユーザー定義SQLステートメントが含まれています。CALLステートメントを使用して、ストアドプロシージャを呼び出すことができます。もちろん、CALLステートメントを使用して、ストアドプロシージャの他のストアドプロシージャを呼び出すこともできますが、DROPステートメントを使用して、他のストアドプロシージャを削除することはできません。

26.ストアドプロシージャのパラメーターは、データテーブルのフィールド名と同じであってはなりません。
ストアドプロシージャのパラメーターリストを定義するときは、パラメーター名とデータベーステーブルのフィールド名を区別するように注意する必要があります。そうしないと、予期しない結果が発生します。

27.ストアドプロシージャのパラメーターは中国語を使用できますか?
ストアドプロシージャは、ユーザー名に基づいてユーザーの情報を検索し、渡されるパラメーター値が中国語である場合など、通常、ストアドプロシージャ中に中国語のパラメーターが渡される場合があります。このとき、ストアドプロシージャを定義するときに文字セットgbkを最後に追加する必要があります。そうしないと、中国語のパラメータを使用してストアドプロシージャを呼び出すときにエラーが発生します。たとえば、userInfoストアドプロシージャを定義するには、コードは次のようになります。

CREATE PROCEDURE useInfo(IN u_name VARCHAR(50)character set gbk、OUT u_age INT)

28. MySQLのビューとテーブルの違いと接続は何ですか?

2つの違い:

(1)ビューはコンパイルされたSQLステートメントであり、SQLステートメントの結果セットに基づく視覚的なテーブルですが、テーブルはそうではありません。

(2)ビューには実際の物理レコードはありませんが、基本テーブルにはあります。

(3)テーブルはコンテンツであり、ビューはウィンドウです。

(4)テーブルは物理的なスペースを占め、ビューは物理的なスペースを占めません。ビューは論理的な概念にすぎません。テーブルは時間内に変更できますが、ビューは作成されたステートメントでのみ変更できます。

(5)ビューはデータテーブルを表示する方法の1つで、データテーブルの特定のフィールドで構成されるデータをクエリできます。これは、いくつかのSQLステートメントの単なるコレクションです。セキュリティの観点から、ビューはユーザーがデータテーブルに触れるのを防ぐことができるため、ユーザーはテーブルの構造を知りません。

(6)テーブルはグローバルモードのテーブルに属し、実テーブルであり、ビューはローカルモードのテーブルに属し、仮想テーブルです。

(7)ビューの作成と削除はビュー自体にのみ影響し、対応する基本テーブルには影響しません。

2つの間の接続:

ビューは、基本テーブルの上に構築されたテーブルです。ビュー(つまり、定義された列)とコンテンツ(つまり、すべてのレコード)は基本テーブルから取得され、基本テーブルの存在に基づいて存在します。ビューは基本的なテーブルにも対応できます。

複数の基本テーブルに対応できます。ビューは、論理的な意味で確立された基本的なテーブルと新しい関係を抽象化したものです。

29.トリガーを使用する場合は特に注意してください。
トリガーを使用する場合は注意が必要です。同じテーブルの場合、同じイベントで作成できるトリガーは1つだけです。たとえば、テーブルアカウントのBEFORE INSERTトリガーを作成した場合、テーブルアカウントのBEFORE INSERTトリガーを再度作成すると、MySQLエラーが報告されます。現時点では、テーブルアカウントで作成できるのはAFTER INSERTまたはBEFORE UPDATEタイプのトリガーのみです。トリガーの柔軟な使用は、操作における多くのトラブルを節約します。ここをクリックして、BATインタビューに対するMYSQLインタビューの55の質問をまとめてください。

30.時間内に不要になったトリガーを削除します。
トリガーが定義されると、トリガーイベントが実行されるたびに、トリガーがアクティブになり、トリガー内のステートメントが実行されます。要件が変更され、トリガーがトリガーを変更または削除しない場合でも、トリガーは古いステートメントを実行し、新しいデータの整合性に影響を与えます。したがって、使用されなくなったトリガーは時間内に削除する必要があります。

31.ユーザーを作成するにはどの方法を使用すればよいですか?
ユーザーを作成する方法はいくつかあります。GRANTステートメント、CREATE USERステートメント、およびユーザーテーブルの直接操作です。一般に、ユーザーテーブルにはユーザー情報を直接挿入するのではなく、GRANTまたはCREATE USERステートメントを使用することをお勧めします。ユーザーテーブルにはグローバルレベルのアクセス許可やその他のアカウント情報が格納されるためです。ユーザーテーブルのレコードを誤って破棄すると、 MySQLサーバーに大きな影響を与えます。

32. mysqldumpによってバックアップされたファイルは、MySQLでのみ使用できますか?
mysqldumpによってバックアップされたテキストファイルは、実際にはデータベースのコピーです。このファイルを使用して、MySQLでデータベースを復元するだけでなく、ファイルを変更するだけでSQL ServerやSybaseなどの他のデータベースでデータベースを復元できます。これにより、データベース間の移行がある程度達成されます。

33.バックアップツールの選択方法
データファイルを直接コピーすることは、最も直接的で高速なバックアップ方法ですが、欠点は、増分バックアップが基本的に不可能であることです。これらのテーブルがバックアップ中に使用されないようにする必要があります。複製中にサーバーがテーブルを変更している場合、複製は無効です。ファイルをバックアップするときは、サーバーをシャットダウンしてからサーバーを再起動するのが最善です。データの整合性を確保するには、ファイルをバックアップする前に次のSQLステートメントを実行する必要があります。

CREATE PROCEDURE useInfo(IN u_name VARCHAR(50)character set gbk、OUT u_age INT)

ディレクトリはすることができます。mysqlhotcopyは、LOCK TABLES、FLUSH TABLES、およびcpまたはscpを使用してデータベースをすばやくバックアップするPERLプログラムです。これはデータベースまたは単一のテーブルをバックアップする最も速い方法ですが、データベースファイルが配置されているマシンでのみ実行でき、mysqlhotcopyはMyISAMテーブルのバックアップにのみ使用できます。

mysqlhotcopyは、小規模なデータベースのバックアップに適しています。データの量は多くありません。mysqlhotcopyプログラムを使用して、毎日完全バックアップを実行できます。mysqldumpはデータテーブルをSQLスクリプトファイルに導きます。これは、異なるMySQLバージョン間でアップグレードする場合に比較的適しています。これは、最も一般的に使用されるバックアップ方法でもあります。mysqldumpは直接レプリケーションよりも低速です。つまり、メモリ内のデータがディスクにフラッシュされ、コピー処理中に新しいデータが書き込まれないように、データテーブルが同時にロックされます。この方法でバックアップされたデータも非常に簡単に復元でき、元のデータベースに直接コピーして戻します

34.通常、どのログを開く必要がありますか?
ログは、MySQLのパフォーマンスに影響するだけでなく、多くのディスク容量を使用します。したがって、不要な場合は、ログをできるだけオンにしないでください。さまざまな使用環境に応じて、さまざまなログを開くことを検討できます。たとえば、開発環境でクエリ効率ステートメントを最適化するには、スロークエリログをオンにします。ユーザーのすべてのクエリ操作を記録する必要がある場合は、一般クエリログをオンにします。データ変更を記録する必要がある場合は、バイナリログをオンにします。エラーログはデフォルトです。開いた。

35.バイナリログの使用方法
バイナリログは主にデータの変更を記録するために使用されます。変更をデータベースに記録する必要がある場合は、バイナリログをオンにすることができます。バイナリログの特性に基づいて、データリカバリだけでなく、データレプリケーションにも使用できます。

通常のデータベースバックアップの場合、データ損失がある場合は、バックアップを使用して最初にほとんどのデータを復元し、次にバイナリログを使用して最新のバックアップ以降に変更されたデータを復元できます。デュアルシステムホットバックアップの場合、MySQLのバイナリログを使用してデータの変更を記録し、その変更をバックアップサーバーにコピーできます。

36.スロークエリログの使用方法
スロークエリログは主に、クエリ時間が長いログを記録するために使用されます。開発環境では、スロークエリログをオンにして、クエリ時間が長いクエリステートメントを記録し、これらのステートメントを最適化できます。long_query_timeの値を設定することで、さまざまな程度の遅いクエリステートメントを柔軟にマスターできます。

37.できるだけ多くのインデックスを作成する方が良いですか?
妥当なインデックスはクエリの速度を向上させることができますが、インデックスが多いほど良いとは限りません。insertステートメントを実行するとき、MySQLは新しく挿入されたレコードにインデックスを付ける必要があります。インデックスが多すぎると、挿入操作が遅くなります。原則として、クエリで使用されるフィールドのみにインデックスが作成されます。

おすすめ

転載: blog.csdn.net/qq_21383435/article/details/108479153