假设我有以下观点:
CREATE VIEW dummy AS
SELECT a.some_column, b.other_column
FROM a LEFT JOIN b USING (key_column);
Run Code Online (Sandbox Code Playgroud)
当我执行 a 时SELECT some_column FROM dummy,有没有办法指示优化器将查询重写为SELECT some_column FROM a并跳过连接?如何?
我想将我们 SP 中的一些功能分解为单独的函数/存储过程,但我担心潜在的性能损失。特别是,与从该函数中完整写出查询相比,使用表值函数进行连接的效率如何?
我有一个包含部门和员工表的数据库,我需要返回每个部门的员工人数。我写了以下查询:
SELECT d.ID, d.Name, COUNT(*) EmployeeCount
FROM dbo.Departments d
INNER JOIN dbo.Personnel p
ON p.DepartmentID = d.ID
GROUP BY d.ID, d.Name;
Run Code Online (Sandbox Code Playgroud)
问题是,我担心GROUP BY操作员在处理VARCHAR色谱柱时会变慢。我希望能够写
SELECT d.ID, ANY(d.Name), COUNT(*) EmployeeCount
FROM dbo.Departments d
INNER JOIN dbo.Personnel p
ON p.DepartmentID = d.ID
GROUP BY d.ID;
Run Code Online (Sandbox Code Playgroud)
我可能会使用 MIN/MAX 聚合函数,但它们可能会使查询更慢。我知道,在 MySQL 中,您可以选择未出现在GROUP BY子句中的列,DB 引擎将随机返回该列的任何行值。在 T-SQL 中这样的事情可行吗?