sql >> データベース >  >> RDS >> Mysql

MySQL-この階層データを処理するための最良の方法は?

    Quassnoi 入れ子集合モデルと隣接リストモデルでいくつかのパフォーマンステストを実行し、その結果と推奨事項を彼のブログ投稿隣接リストとネストされたセット:MySQL 。エグゼクティブサマリーは次のとおりです。

    • 入れ子集合は、すべての子ノードまたはすべての親ノードをフェッチするのに高速です。
    • テーブルを頻繁に更新する必要がある場合は、入れ子集合はお勧めできません。

    彼の記事からの結論は次のとおりです。

    この記事の残りの部分では、テーブルを定義し、クエリを実装し、パフォーマンスを測定する方法を示します。空間インデックスの使用は、あなたにとって新しいかもしれない入れ子集合モデルのパフォーマンスを改善するための賢いアイデアです。

    MySQLを使用しないアプローチも検討している場合は、PostgreSQL を参照してください。 これは別の無料のオープンソースデータベースです。 PostgreSQLは、再帰的な共通テーブル式> これにより、MySQLよりも階層データのクエリが簡単になり、パフォーマンスも向上します。 Quassnoiは、隣接リストと入れ子集合:PostgreSQL 詳細が表示されます。

    他のアプローチを検討している間、Oracleのデータベースも言及する価値があります。 Oracleには、カスタム拡張機能CONNECT BYもあります。 これにより、階層データのクエリが非常に簡単かつ高速になります。 Quassnoiの記事隣接リストと入れ子集合:Oracle ここでもパフォーマンスの詳細について説明します。この場合、すべての子を取得するために必要なクエリは非常に単純です。

    SELECT *
    FROM yourtable
    START WITH id = 42
    CONNECT BY parent = PRIOR id
    


    1. C#からMySQLにGUIDを保存する

    2. 長所と短所を使用してSQLServerテーブルの行をカウントする4つの方法

    3. JavaでOracle間隔を表す方法

    4. MySQLコンソールの画面をクリアするにはどうすればよいですか?