在面试中我被问到一个棘手的SQL问题。
Select * from Employee where EmployeeId = 23
Select * from Employee where 23 = EmployeeId
请帮助我找出上述陈述之间的区别,是否有关于索引?
答案 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;
如果没有表上的索引,它会执行相同的操作,即表扫描:
如果添加索引然后执行相同的两个查询,则会获得相同的计划,但使用索引搜索而不是表扫描
ALTER TABLE #Employees ADD CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED([ID] ASC);
SELECT * FROM #Employees WHERE ID = 1;
SELECT * FROM #Employees WHERE 1 = ID;
如果您也要测试它,请记得丢弃表格:)
DROP TABLE #Employees;