方法: 1. インデックスを作成するときは、テーブル全体のスキャンを避けるようにしてください。 2. インデックスでの計算の使用を避けてください。 3. パラメータ化された SQL を使用してみてください。 4. 複数の SQL ステートメントを 1 つの SQL に圧縮してみてください。 ; 5. HAVING 句を where 句に置き換えます; 6. 複数のテーブルを接続する場合は、テーブルの別名を使用します; 7. カーソルなどの使用を避けるようにしてください。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
1. テーブル全体のスキャンを回避するには、まず where に関係する列にインデックスを作成し、
# で並べ替えることを検討する必要があります。 # #2. (1) 頻繁に取得する必要があるフィールドにインデックスを作成します。たとえば、テーブル フィールドのユーザー名に基づいて取得する場合は、名前フィールドにインデックスを作成する必要があります。従業員の部門と従業員の職位レベルに基づいて取得する場合、従業員の部門と従業員の職位レベルの 2 つのフィールドにインデックスを作成する必要があります。 (2) インデックスを作成すると検索のパフォーマンスが大幅に向上することが多いため、検索速度が遅すぎると感じた場合は、最初にインデックスを作成することを考えるべきです。 (3) 1 つのテーブルに 6 つを超えるインデックスを持たないことが最善です。多すぎる場合は、一般的に使用されない一部の列にインデックスを構築する必要があるかどうかを検討する必要があります。インデックスは多いほど良いです。インデックスにより、対応する選択の効率は向上しますが、挿入または更新中にインデックスが再構築される可能性があるため、挿入と更新の効率も低下します。そのため、インデックスの構築方法には注意が必要です。特定の状況に応じて考慮されます。select * from user where salary*22>11000(salary是索引列)
select * from user where salary>11000/22(salary是索引列)
7. Union を Union all に置き換えます
8. 中間結果を一時的に保存するために「一時テーブル」の使用を検討してください
ただし、システム テーブル リソースの消費を減らすために、一時テーブルを頻繁に作成および削除することも避ける必要があります。
9. 必要な場合にのみトランザクション開始変換を使用する
場合によっては、begin tran を明示的に宣言する必要があります。たとえば、「挿入、削除、および変更」操作を実行する場合、複数のテーブルを同時に変更する必要があります。複数のテーブルのすべての変更を行う必要があります。テーブルが成功したか、どのテーブルも成功しませんでした。 begin tran はそのような役割を果たし、複数の SQL ステートメントをまとめて実行し、最終的にそれらをまとめてコミットできます。利点はデータの一貫性が保証されていることですが、完璧なものはありません。 Begin tran によって支払われる代償として、送信前に、SQL ステートメントによってロックされているすべてのリソースは、コミットされるまで解放できなくなります。
Begin tran がトラップする SQL ステートメントが多すぎると、データベースのパフォーマンスが低下することがわかります。大規模なトランザクションがコミットされる前に、他のステートメントが必然的にブロックされ、その結果、大量のブロックが発生します。
Begin tran を使用する原則は、データの一貫性を確保することを前提として、begin tran によってトラップされる SQL ステートメントが少ないほど良いということです。場合によっては、トリガーを使用してデータを同期できますが、begin tran は必ずしも使用されるわけではありません。
大量のデータをクライアントに返さないようにしてくださいデータの量が大きすぎる場合は、対応する要件が妥当であるかどうかを検討する必要があります。カーソルは効率が悪いため、カーソルで操作するデータが10,000行を超える場合は、書き換えを検討する必要があります。
プログラミング関連の知識の詳細については、プログラミング入門を参照してください。 !
以上がデータベース SQL チューニングにはどのような方法がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。