Quassnoi 入れ子集合モデルと隣接リストモデルでいくつかのパフォーマンステストを実行し、その結果と推奨事項を彼のブログ投稿隣接リストとネストされたセット:MySQL 。エグゼクティブサマリーは次のとおりです。
- 入れ子集合は、すべての子ノードまたはすべての親ノードをフェッチするのに高速です。
- テーブルを頻繁に更新する必要がある場合は、入れ子集合はお勧めできません。
彼の記事からの結論は次のとおりです。
この記事の残りの部分では、テーブルを定義し、クエリを実装し、パフォーマンスを測定する方法を示します。空間インデックスの使用は、あなたにとって新しいかもしれない入れ子集合モデルのパフォーマンスを改善するための賢いアイデアです。
MySQLを使用しないアプローチも検討している場合は、PostgreSQL を参照してください。 これは別の無料のオープンソースデータベースです。 PostgreSQLは、再帰的な共通テーブル式> これにより、MySQLよりも階層データのクエリが簡単になり、パフォーマンスも向上します。 Quassnoiは、隣接リストと入れ子集合:PostgreSQL 詳細が表示されます。
他のアプローチを検討している間、Oracleのデータベースも言及する価値があります。 Oracleには、カスタム拡張機能CONNECT BY
もあります。 これにより、階層データのクエリが非常に簡単かつ高速になります。 Quassnoiの記事
SELECT *
FROM yourtable
START WITH id = 42
CONNECT BY parent = PRIOR id