选择参数的顺序是否重要?

时间:2016-10-17 13:31:00

标签: sql sql-server

如果我使用包含至少2列的表格,如下所示:

[User]
[FirstName]|[LastName]
Robert-Dupont
Louis-Dupont
Georges-Andre

假设存在大量数据,并且'FirstName'中的独特结果比'LastName'中的结果要多得多,哪个查询最快:

查询1:

SELECT * USER WHERE LastName = 'Dupont' AND FirstName = 'Robert'

查询2:

SELECT * USER WHERE FirstName = 'Robert' AND LastName = 'Dupont'

有区别吗?

感谢您的帮助!

4 个答案:

答案 0 :(得分:4)

比较的顺序无关紧要。 SQL Server应该优化数据的WHERE子句。

但是,如果您关心性能,则应使用user(firstname, lastname)user(lastname, firstname)索引。比较的顺序不是正确的考虑因素。

答案 1 :(得分:0)

以下形式的索引

(firstname,lastname)

可以在两个查询中提供帮助..

firstname='' and lastname=''

lastname='' and fastname=''

因此您的两个查询都更快,但是当您发出以下表单的查询时,使用相同的索引

firstname>='' and lastname=''

Firstname使用索引,SQLServer不能在第二列上使用索引,但它使用残差查找来过滤掉值

答案 2 :(得分:0)

两个查询都相同更快。因为'where'条款包含条件。这不是重要的独特专栏。

答案 3 :(得分:0)

当两者处于同一水平时,它们完全相同。但这肯定更好:

select a.order_id - (select b.order_id from sales_order_payment b where b.id = a.id + 1) from sales_order_payment a where a.id = 1823595234;

修改

回到关系代数,最好在树下尽可能地过滤任何结果。假设姓氏比名字少,你首先过滤'Duponts',然后在结果集中查找'Roberts'。