2

MySql クエリ オプティマイザは次のクエリをどのように処理しますか?

Select * from Eomlpyees e where e.department_id = 100 and e.name like '%%';

Select * from Eomlpyees e where e.department_id = 100;

最初のクエリは休止状態の名前付きクエリです。「名前」フィルターを使用する必要のない別の API を紹介します。

空の「名前」フィルターを渡すか、2 番目の名前付きクエリを追加して、最初のクエリを使用する必要があります。

4

3 に答える 3

2

どちらの場合も、department_id のインデックスが使用されます。最初のクエリでは、MySQL は結果セットに対して追加のスキャンを実行し (department_id によるフィルタリングの後)、レコードが名前パターンに一致するかどうかをフィルタリングします。オプティマイザーは、これがすべての投稿に一致することを確認し、このスキャンを実行しない場合があります (提案されているように説明を確認してください)。ただし、これはバージョン固有のものでもある可能性があります

于 2012-04-17T13:34:09.673 に答える
1

を使用して確認できますEXPLAIN

詳細はこちらをご覧ください。

于 2012-04-17T13:29:23.857 に答える
1

まず、両方のクエリは同等ではありません。2 番目のクエリはnullname の値を表示しますが、最初のクエリは name の値を表示しませんnull

そうしないと、最初のクエリに比較するフィールドが 2 つあるため、2 番目のクエリよりも時間がかかります。

于 2012-04-17T13:39:04.050 に答える