这个问题实际上可以应用于任何语言。它与此相似,但不完全相同。
我有一个网站应用程序,它将显示数据库中的数据。三个数据库表:
tblProfessor(Id,FirstName,LastName)
tblStudent(Id,FirstName,LastName)
tblProfessorStudent(Id,StudentId,ProfessorId)
所以我们有学生和教授。学生可以由多个教授教授,教授可以教授多个学生。
查询数据的两种方式:
- 返回所有三个表的连接,在这种情况下,我们传输一些重复数据。
- 为每个表返回三组。我知道可以从我的 Web 应用程序一次调用中返回多组数据。我不清楚该调用的机制,但我认为它只是与数据库的一个连接(与上面提到的类似问题相反)。
第一种情况下的查询:
select
ProfessoirId = p.Id
,ProfessorFirstName = p.FirstName
,ProfessorLastName = p.LastName
,StudentId = s.Id
,StudentFirstName = s.FirstName
,StudentLastName = s.LastName
from tblProfessorStudent ps
inner join tblProfessor p
on p.id = ps.ProfessorId
inner join tblStudent s
on s.id = ps.StudentId
我所说的重复是每行返回学生和教授的名字和姓氏 - “学生由教授教”和“教授教学生”的组合。重复导致需要从 DB 传输到应用程序的额外 kb 量。
第二种情况的查询将像这样简单:
select <columns> from tblProfessor
select <columns> from tblStudent
select <columns> from tblProfessorStudent
我应该如何从性能角度为我的应用程序查询数据?