如果我使用包含至少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'
有区别吗?
感谢您的帮助!
答案 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'。