值= Field vs Field = sql中的值之间的差异

时间:2017-10-10 06:30:10

标签: sql

在面试中我被问到一个棘手的SQL问题。

Select * from Employee where EmployeeId = 23
Select * from Employee where 23 = EmployeeId

请帮助我找出上述陈述之间的区别,是否有关于索引?

1 个答案:

答案 0 :(得分:3)

我在SQL Server中这样做但我假设每个优化器以相同的逻辑方式工作。这两个查询做同样的事情:

CREATE TABLE #Employees (ID   INT IDENTITY(1, 1), name NVARCHAR(100));
INSERT INTO #Employees VALUES('Test1'), ('Test2');

SELECT * FROM #Employees WHERE ID = 1;
SELECT * FROM #Employees WHERE 1 = ID;

如果没有表上的索引,它会执行相同的操作,即表扫描:

enter image description here

如果添加索引然后执行相同的两个查询,则会获得相同的计划,但使用索引搜索而不是表扫描

ALTER TABLE #Employees ADD CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED([ID] ASC);

SELECT * FROM #Employees WHERE ID = 1;
SELECT * FROM #Employees WHERE 1 = ID;

enter image description here

如果您也要测试它,请记得丢弃表格:)

DROP TABLE #Employees;