MySQL の B ツリー インデックスの実際の詳細はこれよりも複雑ですが、ほとんどの場合、列にインデックスを設定すると、MySQL エンジンはその列によって順序付けられSELECT
ているかのようにテーブルに対して s を実行できると言えます。
code
列にインデックスがあり、レコードを検索している場合、code LIKE 'a%'
すべての MySQL (または十分に賢い限り、他の SQL パッケージ) がしなければならないのは、'a の先頭からすべてのレコードを吐き出すことです。 ' から 'b' の先頭まで。ただし、レコード where を検索している場合、行が WHERE 句に一致するかどうかとインデックス内の位置との単純な関係がないためcode LIKE '%a%'
、テーブルが既に によって並べ替えられていても役に立ちません。したがって、2 番目のクエリでは、テーブル内のすべての行のエントリのcode
すべての文字をチェックする以外に、データベースが合理的にできることは何もありません(既に結果がキャッシュされている場合を除きます)。code
これは直感的に理解するのがかなり簡単です。なぜなら、自分自身が人間として合理的に類似したことを行うことを想像できるからです。オックスフォード英語辞典で「a」で始まるすべての単語を見つけたい場合は、「a」の先頭から「b」の先頭までのすべてのページを調べれば、表示されるすべての単語が単語になります。 「あ」から始まります。辞書内のどこかに「a」が含まれるすべての単語を見つけたい場合、並べ替えられた辞書はあまり役に立ちません。あなたが十分に洗練されている場合は、辞書の順序を少し利用することができます(辞書の最初の 'b...' 単語の前のすべての単語には 'a' が含まれているという知識を使用するなど)。最終的にあなたの