これに似たポリモーフィックがあるとしましょう
| document_id | owner_type | owner_id |
| 1 | Client | 1 |
| 1 | Client | 2 |
| 2 | User | 1 |
+を探してクエリを呼び出すことはわかっていますowner_type
。owner_type
owner_id
SELECT * FROM document_name_ownerships WHERE owner_type = 'Client`
SELECT * FROM document_name_ownerships WHERE owner_type = 'Client` and owner_id = 1
この SQL シナリオで所有者列にインデックスを付けるdocument_id
最良の方法 (パフォーマンス) を知りたい
解決策 1:
CREATE INDEX do_type_id_ix ON document_ownerships (owner_type, owner_id)
このようにして、両方のシナリオで機能するインデックスを 1 つだけ持つことになります
解決策 2:
CREATE INDEX do_id_type_ix ON document_ownerships (owner_id, owner_type)
CREATE INDEX do_type_ix ON document_ownerships (owner_type)
このようにして、データベースの使用方法と完全に一致するインデックスが作成されます。唯一のことは、1つしか持てないのに2つのインデックスがあることです
解決策 3:
CREATE INDEX do_id_ix ON document_ownerships (owner_id)
CREATE INDEX do_type_ix ON document_ownerships (owner_type)
個々の列インデックス
MySQLコンソールで調査していたものから、explain
非常によく似た結果が得られます。これは新しいプロジェクトであるため、これを適切に調査するのに十分なデータがないため、100%確実です(データベースに数百のレコードを入力した場合でも)。それで、誰かが彼らの経験からアドバイスをくれますか?