5

これに似たポリモーフィックがあるとしましょう

| document_id | owner_type | owner_id |
| 1           | Client     | 1        |
| 1           | Client     | 2        |
| 2           | User       | 1        |

+を探してクエリを呼び出すことはわかっていますowner_typeowner_typeowner_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%確実です(データベースに数百のレコードを入力した場合でも)。それで、誰かが彼らの経験からアドバイスをくれますか?

4

1 に答える 1