gpt4 book ai didi

c# - Select 查询中的 if 条件还是后面代码中的 If 条件?什么是性能明智的好?

转载 作者:行者123 更新时间:2023-11-29 12:49:07 24 4
gpt4 key购买 nike

我有一个 MYSQL 表,用于存储员工的联系人值(add_contact_details)。此 add_contact_details 表包含 3 百万条记录。我正在使用此选择查询来获取该表中联系人的记录。

SELECT 
head.`add_title` AS `title`,
head.`add_description` AS `descp`,
con.`con_name` AS `name`,
IF(
con.`con_status_show_email` = TRUE,
con.`con_email`,
NULL
) AS `email`
FROM
`add_header` AS `head`
INNER JOIN `add_contact_details` AS `con`
ON head.`add_id` = con.`add_id_ref`;

因此,如果 con_status_show_email=true 则电子邮件字段将返回电子邮件,否则该列将返回 NULL 值。因此,我将其输出到网络表单中的数据表中,并根据该电子邮件标签显示可见的 false 或 true 。这就是我现在正在做的事情。

如果我这样做怎么办?

SELECT 
head.`add_title` AS `title`,
head.`add_description` AS `descp`,
con.`con_name` AS `name`,
con.`con_status_show_email`,
con.`con_email`
from
`add_header` AS `head`
INNER JOIN `add_contact_details` AS `con` ;

所以在这里它将附加列返回到数据表。因此,在后面的代码中,我必须检查 con_status_show_email 是否包含 nullvisible false 电子邮件标签,如果为 true,则返回 con_email 列中的电子邮件。

所以这两种方法都做同样的事情。如果部分在数据库内部工作并返回几列到数据表,则第一种方法中的差异很小。在第二种方法中,它只是将查询结果重新发送到数据表,并在其后面的代码中执行一些 if 部分。那么什么是最好的呢?如果我在选择查询中使用“If”语句会导致性能问题吗?

最佳答案

就性能而言,我会执行以下操作:

  1. 去掉那个if函数
  2. 返回 con_status_show_emailcon_email 列,然后在运行时决定是否显示电子邮件字段
  3. 百万条记录?您肯定需要服务器端分页,因此添加一些服务器端分页而不是运行全选查询,除非这是与报告相关的查询

回复评论

What I did is just bind the datatable to gridview in aspx. And I already enabled the paging in gridview. Is that ok? Or do I need to control the number of records which is coming from the select query? Does enabling the paging option will do the magic?

GridView 默认分页功能对于您的情况来说不够好,您需要通过实现一个查询来自定义分页,该查询仅返回由 GridView 页面大小指定的消费代码需要的数据

Why you saying that get rid of the If statement. Is Databases are inefficient regarding this?

当然,如果您要检索数百万条记录,if 函数将为 select 查询中的每条记录进行评估...也就是说,它'将被评估一百万次

关于c# - Select 查询中的 if 条件还是后面代码中的 If 条件?什么是性能明智的好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25028531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com