小编Mih*_*hai的帖子

如果我没有读取联接表中的任何列,Oracle 优化器仍会计划联接吗?

假设我有以下观点:

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并跳过连接?如何?

oracle optimization

6
推荐指数
1
解决办法
127
查看次数

SQL Server 优化器是否在存储过程中内联函数调用?

我想将我们 SP 中的一些功能分解为单独的函数/存储过程,但我担心潜在的性能损失。特别是,与从该函数中完整写出查询相比,使用表值函数进行连接的效率如何?

sql-server stored-procedures

3
推荐指数
1
解决办法
621
查看次数

在 T-SQL 中实现“ANY”聚合运算符

我有一个包含部门和员工表的数据库,我需要返回每个部门的员工人数。我写了以下查询:

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 中这样的事情可行吗?

sql-server

2
推荐指数
1
解决办法
4470
查看次数