MySQL の関数インデックス
Oracle などのデータベース管理システムでは、関数インデックスを使用すると、列に適用される特定の関数に基づいてインデックスを作成できます。 、複雑なクエリに対する効率的な検索機能を提供します。たとえば、Oracle は、SUBSTRING(id,1,8) のような関数に基づくインデックス作成をサポートしています。
ただし、MySQL は、一般的な意味での関数ベースのインデックスを本質的にサポートしません。最新バージョン (この説明の時点では 5.6 まで) でも、MySQL にはこの機能がありません。
MySQL の代替手段
MySQL は機能を直接サポートしていませんが、 -ベースのインデックスの場合、同様の結果を達成する別のアプローチがあります:
先頭列プレフィックスインデックス作成:
MySQL では、カラムの先頭部分にインデックスを作成できますが、カラム内の任意のオフセットにはインデックスを作成できません。たとえば、次のように名前の最初の 5 文字を使用してインデックスを作成できます:
create index name_first_five on cust_table (name(5));
トリガー付きの派生列:
より複雑な式の場合は、必要なインデックス付きデータを含む別の列を作成できます。その後、挿入/更新トリガーを使用してこの列にデータを入力し、データの一貫性を維持できます。これは基本的に、必要なインデックス付きデータの事前計算済みバージョンを提供することで関数インデックスをエミュレートします。
このアプローチでは、データ ストレージに関してある程度の冗長性が導入されますが、同様のパフォーマンス上の利点が得られます。また、トリガーによるデータ同期を確保することで、第 3 正規形 (3NF) の違反の可能性も軽減します。
以上がMySQL は Oracle のような関数インデックスをサポートしていますか? 代替手段は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。