我有一个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部分。 什么是最好的? 如果我使用"如果"选择查询中的语句是否会导致性能问题?
答案 0 :(得分:1)
在性能方面,我会做以下事情:
if
功能con_status_show_email
和con_email
列,然后在运行时决定是否显示电子邮件字段背后的代码我所做的只是将数据表绑定到aspx中的gridview。和我 已经在gridview中启用了分页。这可以吗?或者我需要 控制来自select查询的记录数量? 是否启用分页选项才能发挥作用?
GridView默认分页功能对你的情况来说还不够好,你需要通过实现一个查询来自定义分页,该查询只返回由GridView的页面大小指定的cosuming代码所需的数据
为什么你说要摆脱If语句。数据库对此是否效率低下?
当然,如果您要检索数百万条记录,if
函数将针对select
查询中的每条记录进行评估...也就是说,它会被评估为百万次