私はデータベースにこれらのテーブルを持っています:
- エンティティ(ID、名前、削除済み)
- entity_aliases(entity_id、alias_id)
- エイリアス(ID、名前)
このクエリは正常に機能しますが、UNIONのために遅くなります。entities.nameがaliases.nameとスワップされ、最後の列に移動されたことに注意してください。
SELECT entities.id, entities.name, entities.deleted, NULL AS main_name
FROM entities
UNION
SELECT entities.id, aliases.name, entities.deleted, entities.name AS main_name
FROM entities
JOIN entities_aliases ON entities_aliases.entity_id = entities.id
JOIN aliases ON entities_aliases.alias_id = aliases.id
ORDER BY name
このスワッピングは私にとって非常に重要です。削除することはできませんが、データベースの幅(フィールドとリンクの数が増える)と深さ(レコードの数が増える)が進むにつれて、UNIONはますます遅くなります。UNIONを取り除くにはどうすればよいですか?
追加: 必要な出力。たとえば、エンティティ1-AAAとそのエイリアス1-BBBおよび2-CCCがあります。出力は次のようになります。
- AAA
- BBB(AAA)
- CCC(AAA)