ringa_lee
テスト用に 2,500 万のデータを含むテーブルを見つけました。ID は自動インクリメントされる主キーです。
次のステートメントを使用してテストし、クエリ キャッシュをオフにし、各ステップを 10 回連続して実行し、平均時間を計算します。
制限オフセットが小さい場合、インデックスを介して少数の行のみをスキャンするために order by を追加する方が高速です。オフセットが大きい場合、order by を追加するのは遅くなり、テーブル全体のスキャンは高速になります。 。
インデックスが追加されていない場合、SELECT * FROM sys_client LIMIT 100000,10 は 全表扫描 となり、10 番目のレコード 100001 ~ 100010 が取得されます。インデックスを追加した後のみ、テーブル全体を検索するのではなく、100010 件のレコードを検索するため、実行効率が向上します。
全表扫描
order by のない最初のステートメントでは、mysql の処理手順は次のとおりです。
order by
mysql
フィールドが主キー インデックスであると仮定すると、id の処理手順は次のようになります。 mysql
id
のフィールドが実行中にインデックスを使用する場合。インデックス シーケンスを使用して、並べ替えられたデータを直接取得できます。そうでない場合は、ソート操作が実行されます。
あなたの ID はインデックス化されていますか?
0.0001... より複雑な SQL を検証する必要があります
テスト用に 2,500 万のデータを含むテーブルを見つけました。ID は自動インクリメントされる主キーです。
次のステートメントを使用してテストし、クエリ キャッシュをオフにし、各ステップを 10 回連続して実行し、平均時間を計算します。
制限オフセットが小さい場合、インデックスを介して少数の行のみをスキャンするために order by を追加する方が高速です。オフセットが大きい場合、order by を追加するのは遅くなり、テーブル全体のスキャンは高速になります。 。
インデックスが追加されていない場合、SELECT * FROM sys_client LIMIT 100000,10 は
全表扫描
となり、10 番目のレコード 100001 ~ 100010 が取得されます。インデックスを追加した後のみ、テーブル全体を検索するのではなく、100010 件のレコードを検索するため、実行効率が向上します。
order by
のない最初のステートメントでは、mysql
の処理手順は次のとおりです。フィールドが主キー インデックスであると仮定すると、
id
の処理手順は次のようになります。mysql
データを 10 個取得します。
インデックス シーケンスを使用して、並べ替えられたデータを直接取得します。
これら 10 個のデータを返します -
要約すると:のフィールドが実行中にインデックスを使用する場合。インデックス シーケンスを使用して、並べ替えられたデータを直接取得できます。そうでない場合は、ソート操作が実行されます。
あなたの ID はインデックス化されていますか?
0.0001... より複雑な SQL を検証する必要があります