MS SQL Coldfusion微调查询

时间:2011-04-04 21:03:46

标签: sql-server performance coldfusion

同事和我正在尝试微调一个非常简单的查询。他说他曾在某处读过使用较低的vs lcase会影响服务器的性能,而且一种方法比另一种更有效但我们找不到文章,我想我会问你的想法是什么。我们是否应该花时间去其他地方调整性能?

Coldfusion 8 Enterprise MS SQL Server 2000 记录集:500,000多条记录

原始查询:

select last_name lname
from phone
where uid = <cfqueryparam value="#attributes.email#" cfsqltype="cf_sql_varchar" maxlength="50">

选项A

select last_name lname
from phone
where lower(uid) = <cfqueryparam value="#attributes.email#" cfsqltype="cf_sql_varchar" maxlength="50">

选项B

select last_name lname
from phone
where uid = <cfqueryparam value="#lcase(attributes.email)#" cfsqltype="cf_sql_varchar" maxlength="50">

选项C

select last_name lname
from phone
where uid = lower(<cfqueryparam value="#attributes.email#" cfsqltype="cf_sql_varchar" maxlength="50">)

数据库已编制索引,但不包含但不包含约500,000条记录。即使这是一个简单的查询,我们将循环这约150次,所以我们可以做的任何事情来削减一两秒都会有所帮助。

3 个答案:

答案 0 :(得分:1)

在索引列上使用lower将导致MS SQL不使用您的索引。这可能会导致您的尺寸表中出现重大性能损失。您应该确保插入时UID始终为小写,或者可以尝试:lower function on indexed column

答案 1 :(得分:0)

在您的情况下,您正在搜索电子邮件字段,该字段大部分时间都是小写字符而不是大写字母。因此,转换为小写可以(测试会告诉你)加快速度。

要将此应用于您的查询,您必须将字段和电子邮件变量转换为小写(以使它们具有可比性):

select last_name lname
from phone
where lower(uid) = <cfqueryparam value="#lcase(attributes.email)#" 
                                 cfsqltype="cf_sql_varchar"
                                 maxlength="50">

(在#attributes.email#标记内转换cfqueryparam更好,因为在将查询发送到sql-server之前只会执行一次)

本文中的更多信息:Performance Tip: Upper Case vs Lower Case

答案 2 :(得分:0)

完成所有这些LCase / LOWER可能没有意义:

SQL Server Text Matching Is Case INSENSITIVE

How to perform case sensitive searches in SQL Server?

  

默认的SQL Server安装不区分大小写,这意味着SQL Server不会区分大写和小写字母/字母。