如果条件里面选择查询或者条件里面的代码落后了?什么是表现明智的好?

时间:2014-07-30 03:57:41

标签: c# mysql asp.net datatable

我有一个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值。所以我把它放到了webform中的数据表中,并且根据它可以看到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_email是否包含null可见的false电子邮件标签,如果是,则返回con_email列中的电子邮件。

所以两种方法做同样的事情。如果部分在DB内部工作并且将少量列返回到数据表,则diffrence在第一个方法中很小。 在第二种方法中,它只是将查询结果返回到数据表,并在其后面的代码中执行一些if部分。 什么是最好的? 如果我使用"如果"选择查询中的语句是否会导致性能问题?

1 个答案:

答案 0 :(得分:1)

在性能方面,我会做以下事情:

  1. 摆脱if功能
  2. 返回con_status_show_emailcon_email列,然后在运行时决定是否显示电子邮件字段背后的代码
  3. 百万记录?您肯定需要服务器端分页,因此添加一些服务器端分页而不是运行全选查询,除非这是与报告相关联的查询
  4. 回答评论

      

    我所做的只是将数据表绑定到aspx中的gridview。和我   已经在gridview中启用了分页。这可以吗?或者我需要   控制来自select查询的记录数量?   是否启用分页选项才能发挥作用?

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

      

    为什么你说要摆脱If语句。数据库对此是否效率低下?

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