Sergey Golobokov Asked:2024-12-18 06:43:43 +0800 CST2024-12-18 06:43:43 +0800 CST 2024-12-18 06:43:43 +0800 CST SQL中查询两个字段而不是全部字段的利润有多大? 772 假设 users 表有字段username, email, first_name, last_name。您需要获取数据username和email. 如果您仅调用这些字段,并且相应地,如果您调用所有字段并仅获取必要的字段。 sql 2 个回答 Voted Best Answer CrazyElf 2024-12-18T14:35:54+08:002024-12-18T14:35:54+08:00 这一切都取决于过程的规模。如果这是某种每天一次向 100 个用户请求数据的任务,那么对您来说没有什么区别。但如果这是一个高负载的服务,有一百万(或十亿)个用户,并且您计算通过网络传输的每个字节以及服务操作的每一毫秒,那么效果将是显而易见的。 即使我们不考虑查询对数据库本身的最优性,在效率上也可能有不同的选择,而我们只考虑数据库链接->后端,那么,根据粗略的估计,如果得到所有字段,而不仅仅是必要的字段,那么数据库和后端之间的通道上的负载就会增加一倍,并在数据库和后端方面创建不必要的工作。毕竟,需要这些数据: 在数据库端序列化 通过网络从数据库传输到后端 在后端反序列化 需要传输的字段数量是原来的两倍 -> 工作量是原来的两倍。 但您始终需要从整体上看待业务问题和条件。如果这个额外的负载对你来说并不重要,那么你不必费心,总是从表中获取所有字段,然后只获取你需要的字段,你将在数据库绑定中减少不必要的代码,并且它会更容易维护这个项目。 但如果这是一个资源关键型项目,那么您将必须对每个请求进行一些优化。甚至可以为每个任务使用其自己的数据库查询进行单独的映射。 但也有可能在这样的项目中,数据不会每次都从数据库中请求,而是存储在本地缓存中以进行优化,然后您就不再需要麻烦了。 Пиу Пиу 2024-12-18T11:29:12+08:002024-12-18T11:29:12+08:00 如果该字段没有索引 正在进行全表读取 在此过程中,会检查每行的条件 如果满足条件,则该行将放置在结果光标中 如果有索引并且优化器认为有必要使用它(表包含相当多的记录) 通过索引搜索匹配的字符串 对于匹配的行,按行 ID 从表中提取行 将字符串放入结果光标中 然后,从包含所有字段的结果行中,它们将简单地为您提供您需要的内容。 结论:所选字段的数量不影响数据检索的速度
这一切都取决于过程的规模。如果这是某种每天一次向 100 个用户请求数据的任务,那么对您来说没有什么区别。但如果这是一个高负载的服务,有一百万(或十亿)个用户,并且您计算通过网络传输的每个字节以及服务操作的每一毫秒,那么效果将是显而易见的。
即使我们不考虑查询对数据库本身的最优性,在效率上也可能有不同的选择,而我们只考虑数据库链接->后端,那么,根据粗略的估计,如果得到所有字段,而不仅仅是必要的字段,那么数据库和后端之间的通道上的负载就会增加一倍,并在数据库和后端方面创建不必要的工作。毕竟,需要这些数据:
需要传输的字段数量是原来的两倍 -> 工作量是原来的两倍。
但您始终需要从整体上看待业务问题和条件。如果这个额外的负载对你来说并不重要,那么你不必费心,总是从表中获取所有字段,然后只获取你需要的字段,你将在数据库绑定中减少不必要的代码,并且它会更容易维护这个项目。
但如果这是一个资源关键型项目,那么您将必须对每个请求进行一些优化。甚至可以为每个任务使用其自己的数据库查询进行单独的映射。
但也有可能在这样的项目中,数据不会每次都从数据库中请求,而是存储在本地缓存中以进行优化,然后您就不再需要麻烦了。
如果该字段没有索引
如果有索引并且优化器认为有必要使用它(表包含相当多的记录)
然后,从包含所有字段的结果行中,它们将简单地为您提供您需要的内容。
结论:所选字段的数量不影响数据检索的速度