2

where 条件に興味があります。私が書く場合:

Select * from table_name 
where insert_date > '2010-01-03' 
and text like '%friend%';

次とは異なりますか?

Select * from table_name 
where text like '%friend%'  
and insert_date > '2010-01-03';

つまり、テーブルが非常に大きく、多くの行があり、mysql が最初に条件 " where insert_date > '2010-01-03' " に準拠したレコードを取得し、次にこれらのレコードで単語 "friend" を検索する場合、 「友人」行を最初に検索したり、日付フィールドを調べたりするよりもはるかに高速です。

where 条件を賢く書くことが重要なのか、それとも mysql が条件を分析して最適な方法で where 条件を書き換えるのか。

ありがとう

4

4 に答える 4

3

いいえ、2 つの where 句は同等である必要があります。どちらを使用しても、オプティマイザーは同じインデックスを選択する必要があります。

ただし、インデックス内の列の順序重要です。

オプティマイザーが間違ったインデックスを使用していると思われる場合は、ヒントを与えることができます。多くの場合、使用することを選択したインデックスを使用するのには十分な理由があります。そのため、何をしているのかを正確に理解していない限り、オプティマイザーのヒントを与えると、状況が悪化することがよくあります。

于 2010-02-03T12:15:53.297 に答える
2

特にMySQLについては知りませんが、通常、この種の最適化はデータベースエンジンに任されています。どちらの順序が速いかは、インデックス、データのカーディナリティ、データの量などによって異なります。

于 2010-02-03T12:15:04.593 に答える
0

データベースの抽象化では、where句の両方が似ているのは本当だと思います

于 2010-02-03T12:18:49.580 に答える
0

定義上、論理積 (AND 演算子) は交換可能です。これはWHERE A AND Bが に等しいことを意味しWHERE B AND Aます。

条件をどの順序で記述しても問題ありません。

ただし、違いを生むのは、テーブルに配置されているインデックスです。クエリ アナライザーはこれらを考慮します。また、最も簡単に確認できる条件の部分を見つけて、最初に適用することもできます。

于 2010-02-03T12:19:31.500 に答える