高品質の SQL の書き方を教えます (練習に必要)

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 を追加する必要はありません。

おすすめ

転載: blog.csdn.net/weixin_40205234/article/details/124668408