<分区>
Possible Duplicate:
Is storing a delimited list in a database column really that bad?
我一直致力于几个 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 通常进行全表扫描。如果没有性能优势,在哪些情况下使用逗号分隔的整数列表有好处?似乎 mysql 设计者在创建 FIND_IN_SET 时考虑到了一些事情。