设计可以解决以下问题的表结构的最有效方法是什么。我的数据以逗号分隔的文本文件形式出现:
ID,Name,Married_To,Lived_In,Works_For,DOB
1325,Joe,Ana; Mary; Elen; Ana,Budapest; Paris; Budapest,IBM,1965-01-15
2313,Mark,Elise,Bucharest; London; Bucharest; London,Microsoft,1972-01-17
3009,Joe,Ana; Cindy; Shaquiya,London; NewYork; Bujumbura; NewYork; Bucharest; Bujumbura; NewYork; Bujumbura,Netflix,1975-01-15
ID不是唯一的,但我可以根据字段组合创建唯一的主键。
这两个乔是截然不同的,但只有一个Ana喜欢乔(她嫁给了第一个Joe,然后是年轻的Joe,并且在晚年她再婚了她的初恋Joe)
我需要以这样的方式读取mysql表中的数据,以便我可以高效地运行如下的查询:
" Ana结婚了多少次"
"有多少人从伦敦搬到布加勒斯特"
"有多少人住在伦敦和布加勒斯特"
真实数据有点不同,每天包含大约700K记录,Lived_in数组最多包含400个元素。 MongoDB(或类似的)可能更合适,但我必须使用mysql。
答案 0 :(得分:0)
您需要一对多关系设计才能更快地使用SQL:
persons (id, name, company, dob)
marriages (id, person_id, married_to, date_from)
addresses (id, person_id, city, sequence_id)
以下是您报告的SQL:
select count(*) from marriages where married_to='Ana';
select count(*) from addresses a,addresses b
where a.person_id=b.person_id
and a.city='London' and b.city='Bucharest'
and a.sequence_id + 1 = b.sequence_id
select count(*) from addresses a,addresses b
where a.person_id=b.person_id
and a.city='London' and b.city='Bucharest'