私は、すべての関係がコンマ区切りの文字列として保存されるいくつかの PHP/MySQL プロジェクトに取り組んできました。
たとえば、共通の関係は次のようになります
(疑似コードで)
table people
id - integer
name - string
age - integer
teams - string (CSV OF integers, ex '1,3,9,21')
table teams
name - String
id - integer
人間関係の管理が面倒になります。
個人のすべてのチームを取得するには:
$person = 'SELECT * FROM People WHERE id= x';
次に、phpで次のようなことをしています
$person['teams'] = SELECT * FROM teams WHERE id IN ($person['teams']);
これを書いているときに、おそらく次のような mysql クエリでそれらを組み合わせることができることに気付きました。
SELECT
people.id,
people.name,
people.teams,
teams.name
FROM people
JOIN teams ON FIND_IN_SET(teams.id, people.teams) WHERE people.id=x
このタイプのセットアップではFIND_IN_SET
、かなり頻繁にを使用しています。
最後に、私の質問は次のとおりです。このような関係を作成すると、パフォーマンス上の利点はありますか?
これまでの私の経験では、通常、FIND_IN_SET は完全なテーブル スキャンを実行していました。パフォーマンス上の利点がない場合、カンマ区切りの整数リストを使用する利点があるのはどのような場合ですか? FIND_IN_SET を作成するときに、mysql の設計者は何かを念頭に置いていたようです。