查询数据库-最佳实践

本文关键字:最佳 数据库 查询 | 更新日期: 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.