查询数据库-最佳实践
本文关键字:最佳 数据库 查询 | 更新日期: 2023-09-27 18:23:45
下面有许多数据库表。我想在数据网格视图中显示每个用户及其相关的"通过"字段值。
当前查询为1.从用户表加载所有用户2.添加到datagridview的用户3.循环数据网格视图-针对每个用户查询i)ExamGeography,ii)ExamPath,iii)ExamSpanish
foreach (DataGridViewRow dgvRow in resultsDataGridView.Rows)
{
dgvRow.Cells["geographyCol"].Value = 'query result from ExamGeography i.e. SELECT Pass FROM ExamGeography WHERE User=@User'
dgvRow.Cells["mathCol"].Value = 'query result from ExamMath i.e. SELECT Pass FROM ExamMath WHERE User=@User'
// ...
}
所以每个用户对数据库进行一次新的调用。对数据库进行尽可能少的调用总是更好的吗?而不是多次调用同一个表?什么是最佳实践/最佳绩效?
我的查询是否应该只是例如"SELECT Pass FROM ExamGeography"(省略WHERE子句),并为所有用户返回?
User Table
User (PK) ----------- Member
User1 Y
User2 Y
User3 N
ExamGeography Table
User (FK) ----------- Pass
User1 Y
User2 Y
User3 Y
ExamMath Table
User (FK) ----------- Pass
User1 N
User2 Y
User3 Y
ExamSpanish Table
User (FK) ----------- Pass
User1 Y
User2 N
User3 N
DataGridView Display
Username Geography Math Spanish
User1 Y N Y
User2 Y Y N
User3 Y Y N
是的,最好尽可能少地调用,假设从数据库中提取的数据可以存储在内存中。从你的例子来看,这应该不是问题。
一旦您从数据库中获得了所有数据(使用存储过程来完成此操作),您就可以在for循环中迭代结果,将它们放入新的数据网格视图中,Bob就是您的叔叔。
您的查询最终应该是这样的:
SELECT *
FROM UserTable a
JOIN ExamGeographyTable b
ON a.User = b.User
JOIN ExamMathTable c
ON a.User = c.User
etc.