PHP / MySQL ツリー構造のパフォーマンス最適化
大規模なツリー構造を管理する場合、階層データを効率的に保存および取得することが重要です。この説明では、深さが異なる約 300 個のノードを含むデータベースに最適なアプローチを見つけることと、サブツリーの迅速な取得に重点を置きます。
ネストされたセット モデル: 効率的なソリューション
Nested Set Model は、MySQL の階層を管理するための効果的なデータ構造です。各ノードに、ツリー内の位置を表す左右の値を割り当てます。このアプローチにより、次のような効率的なクエリが可能になります。
たとえば、次のサンプル データを考えてみましょう。 MySQL:
category_id | name | left | right |
---|---|---|---|
1 | ELECTRONICS | 1 | 20 |
2 | TELEVISIONS | 2 | 9 |
3 | TUBE | 3 | 4 |
4 | LCD | 5 | 6 |
5 | PLASMA | 7 | 8 |
6 | PORTABLE ELECTRONICS | 10 | 19 |
7 | MP3 PLAYERS | 11 | 14 |
8 | FLASH | 12 | 13 |
9 | CD PLAYERS | 15 | 16 |
10 | 2 WAY RADIOS | 17 | 18 |
これらの左右の値を XML ドキュメントの行番号として視覚化すると、ネストされた階層が明確になります:
<electronics> <televisions> <tube> </tube> <lcd> </lcd> <plasma> </plasma> </televisions> <portable electronics> <mp3 players> <flash> </flash> </mp3 players> <cd players> </cd players> <2 way radios> </2 way radios> </portable electronics> </electronics>
このアナロジーは、次のようにネストされたセット モデルの効率を強調します。複数のクエリや結合を行わずにサブツリー全体を取得できます。
In PHP
PHP でのネストされたセット モデルの実装は、ネストされたセット機能を提供する Doctrine のような ORM を使用することで容易に行うことができます。さらに、「MySQL での階層データの管理」などのリソースでは、手動実装に関するガイダンスが提供されます。
以上がサブツリー取得パフォーマンスのために PHP / MySQL ツリー構造を最適化するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。