ホームページ >データベース >mysql チュートリアル >MySQL は Oracle のような関数ベースのインデックスを提供しますか?
MySQL 関数インデックス: Oracle との比較
Oracle では、SUBSTRING(id, 1,8)、データ取得の柔軟性を提供します。しかし、MySQL も同様の機能を提供していますか?
MySQL の制限
Oracle とは異なり、MySQL は従来の意味での関数ベースのインデックスを直接サポートしません。バージョン 5.6 でも、この機能は利用できません。ただし、後のバージョン、特に MySQL 8.0.13 以降では、関数インデックスが導入され、この制限に対処しています。
MySQL の以前のバージョンでは、列の先頭部分にインデックスを付けるオプションは存在しますが、後続の文字にはインデックスを付けません。 。たとえば、次の例では、名前列の最初の 5 文字を使用してインデックスを作成します。
create index name_first_five on cust_table (name(5));
トリガーを使用した代替アプローチ
より複雑な式については、MySQL ユーザー挿入/更新トリガーを使用して、インデックス付け可能なデータを含む別の列を作成できます。これにより、両方の列のデータが同期された状態に保たれます。
このアプローチでは冗長性が生まれますが、関数ベースのインデックスのパフォーマンス上の利点が模倣されます。トリガーはデータの一貫性を維持する責任があるため、3NF にも準拠しています。
要約すると、MySQL は Oracle のような関数ベースのインデックスをネイティブにサポートしていませんが、先頭文字のインデックス作成を通じて同様の結果を達成するための他のメカニズムを提供します。またはトリガーと追加の列を使用します。
以上がMySQL は Oracle のような関数ベースのインデックスを提供しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。