ホームページ > バックエンド開発 > PHPチュートリアル > mysql ステートメントの最適化に関する提案 mysql エクスポート SQL ステートメント mysql インポート SQL ステートメント mysql SQL 言語の書き方

mysql ステートメントの最適化に関する提案 mysql エクスポート SQL ステートメント mysql インポート SQL ステートメント mysql SQL 言語の書き方

WBOY
リリース: 2016-07-29 08:51:49
オリジナル
967 人が閲覧しました

data-id="1190000005008401" data-license="cc">

1. 頻繁に使用されるフィールド (たとえば、これらのフィールドは並べ替えや検索によく使用されます) には、これらのフィールドをインデックスに設定することをお勧めします。
2. フィールド型には可能な限り int 型または tinyint 型を使用します。また、フィールドには可能な限り NOT NULL を使用してください。
3. もちろん、一部のフィールドではテキスト、varchar、その他の文字タイプが使用されることは避けられません。テキスト フィールドを別のテーブルに分離する (主キーに関連付ける) ことが最善です。
4. フィールドのタイプと長さは次のとおりです。これは開発者の最適化スキルの非常に重要な側面です。テーブル データにある程度の量がある場合は、PROCEDURE ANALYSE() コマンドを使用してフィールド最適化の提案を取得することもできます。 (phpmyadmin では、テーブルを表示しているときに [テーブル構造の提案] をクリックすると、これらの提案が表示されます) これにより、テーブルのフィールド構造をより完璧にすることができます。
5. を選択します。常に 番号を使用する必要はありません。同様に、データが 1 行しかない場合は LIMIT 1 を使用するようにしてください。 6. rand() による order を安易に使用しないでください。mysql で障害が発生する可能性があります。 !
7. 各テーブルには ID プライマリ キー (できれば INT タイプ) を設定し、自動的に増加する AUTO_INCREMENT フラグを設定する必要があります。これは実際にテーブル構造を設計するときに最初に行うべきことです。 !
8. 大きな DELETE または INSERT ステートメントを分割します。これら 2 つの操作はテーブルをロックするため、テーブルがロックされると、他の操作を行うことはできません。私の場合、場合によっては、for ループを使用してこれらの操作を 1 つずつ実行する方がよい場合があります。
9. プログラムが事故を起こさないことが本当に確信できない限り、永久リンク mysql_pconnect() を使用しないでください。mysql が停止する可能性もあります。
10. 自分の賢さを示すために複雑な mysql ステートメントを決して使用しないでください。私の知る限り、一度に 3 つまたは 4 つのテーブルを関連付けるステートメントを見ると、人々は非常に信頼できないと感じます。
11. where 句では != または <> 演算子を使用しないようにしてください。そうしないと、エンジンはインデックスの使用を放棄し、テーブル全体のスキャンを実行します。
12. where 句でフィールドの null 値を判断しないようにしてください。そうしないと、エンジンがインデックスの使用を放棄し、テーブル全体のスキャンを実行します。
13. where 句で条件を接続するために または を使用しないようにしてください。そうでない場合、エンジンはインデックスの使用を断念し、次のようなフル テーブル スキャンを実行します。

<code>select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20 </code>
ログイン後にコピー
14. ファジー クエリの %XX% はフル テーブル スキャンにつながります

15。使用する場合は注意してください。そうしないと、テーブル全体のスキャンが発生します。between を使用するようにしてください
16。これにより、エンジンがインデックスの使用を断念して実行することになります。フルテーブルスキャン。例:

<code>select id from t where num/2=100
应改为:
select id from t where num=100*2 </code>
ログイン後にコピー
17. where 句内のフィールドに対して関数演算を実行しないようにする必要があります。これにより、エンジンはインデックスの使用を放棄し、テーブル全体のスキャンを実行します。インデックスを使用すると、対応する選択の効率が向上しますが、挿入または更新中にインデックスが再構築される可能性があるため、挿入と更新の効率も低下します。そのため、インデックスの構築方法は、状況に応じて慎重に検討する必要があります。特定の状況。テーブル内に 6 つを超えるインデックスを持たないことをお勧めします。多すぎる場合は、一般的に使用されない一部の列にインデックスを作成する必要があるかどうかを検討してください。 "

" の代わりに、未使用のフィールドを返さないでください
20. まず、可変長フィールドの記憶域が小さいため、できるだけ char/nchar の代わりに varchar/nvarchar を使用してください。次に、クエリの場合、比較的小さなフィールド内の検索効率が明らかに高くなります。
21. 数値フィールドを使用するようにしてください。フィールドに数値情報のみが含まれる場合は、クエリと接続のパフォーマンスが低下し、ストレージのオーバーヘッドが増加するように設計しないでください。これは、エンジンがクエリと接続を処理するときに文字列内の各文字を 1 つずつ比較し、数値型の場合は 1 回の比較だけで十分であるためです。

アイテムをリストする

  • 上記は、Mysql と SQL ステートメントの内容を含む、mysql ステートメントの最適化に関する提案を紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

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