C# 如果条件在select查询中,或者如果条件在代码后面?性能方面的好处是什么?

C# 如果条件在select查询中,或者如果条件在代码后面?性能方面的好处是什么?,c#,mysql,asp.net,datatable,C#,Mysql,Asp.net,Datatable,我有一个MYSQL表,用于存储员工的联系人值(添加联系人详细信息)。此add_contact_details表包含300万条记录。 我使用这个select查询从该表的联系人中获取记录 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`, NUL

我有一个MYSQL表,用于存储员工的联系人值(添加联系人详细信息)。此add_contact_details表包含300万条记录。 我使用这个select查询从该表的联系人中获取记录

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,则email字段将返回email,否则该列将返回NULL值。所以我把它放到webform中的datatable中,并根据它在电子邮件标签上显示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` ;
所以在这里,它会向datatable返回额外的列。因此,在代码隐藏中,我必须检查con_status_show_电子邮件是否包含null visible false电子邮件标签,如果为true,则在con_电子邮件列中返回电子邮件

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

性能方面,我将执行以下操作:

  • 去掉
    if
    函数
  • 返回
    con_status\u show_email
    con_email
    列,然后在运行时根据代码隐藏决定是否显示电子邮件字段
  • 一百万张唱片?您肯定需要服务器端分页,因此添加一些服务器端分页,而不是运行全选查询,除非这是一个与报告关联的查询
  • 对评论的答复 我所做的只是将datatable绑定到aspx中的gridview。而我 已在gridview中启用分页。可以吗?还是我需要 控制来自select查询的记录数? 启用分页选项是否会起到神奇的作用

    GridView的默认分页函数对于您的情况来说不够好,您需要通过实现一个查询来定制分页,该查询只返回由GridView的页面大小指定的cosuming代码所需的数据

    你为什么这么说呢?摆脱If语句。数据库在这方面是否效率低下


    当然,如果您正在检索数百万条记录,
    if
    函数将对
    select
    查询中的每条记录进行求值……也就是说,它将被求值一百万次

    谢谢您的回答。你为什么这么说呢?摆脱If语句。数据库在这方面是否效率低下?我所做的只是将datatable绑定到aspx中的gridview。我已经在gridview中启用了分页。可以吗?还是需要控制来自select查询的记录数?启用分页选项是否会起到神奇的作用?