1. SQL をクエリするときに select * を使用せず、特定のフィールドを選択するようにしてください。
//反例子
select * from sys_user;
//正例子
select id,name from sys_user;
理由:
リソースを節約し、ネットワークのオーバーヘッドを削減するために必要なフィールドのみを取得します。クエリに * を選択すると、カバー インデックスが使用されない可能性があり、その結果、テーブルにクエリが戻されます。
インデックスのカバーリング: SQL で必要なすべての列データは、テーブルに戻ることなく 1 つのインデックス ツリー上でのみ取得でき、速度が向上します。
例えば:Back-to-table クエリ: 最初に共通インデックスの値を通じてクラスター化インデックス値を特定し、次にクラスター化インデックスの値を通じて行レコード データを特定します。インデックス B+ ツリーを 2 回スキャンする必要があり、そのパフォーマンスは次のとおりです。インデックス ツリーを 1 回スキャンするよりも低いです。
2. クエリ結果が 1 つだけ、または最大/最小レコードが 1 つだけあることがわかっている場合は、limit1 を使用することをお勧めします。
現在 sys_user ユーザー テーブルがあると仮定すると、携帯電話番号が 18811112299 である人を見つける必要があります。
//反例
select id,name from sys_user where mobile = '18811112299'
//正例
select id,name from sys_user where mobile = '18811112299' limit 1
理由:
- limit1 を追加すると、対応するレコードが見つかる限り、下方向へのスキャンは続行されなくなり、テーブル全体のスキャン効率が大幅に向上します。
- もちろん、モバイルが唯一のインデックスの場合は、limit1 を追加する必要はありません。