此 SQL 查询是否会降低性能?
select fullname, address from (select (name + ' ' + lastname) as fullname, address from mytable) as tab
比较:
select (name + ' ' + lastname) as fullname, address from mytable
也许你会想..为什么我要这样做,原因是因为SQL Server不允许在group by中使用别名,所以使用子查询我可以做到这一点
select fullname, address from (select (name + ' ' + lastname) as fullname, address from mytable) as tab group by fullname
而不是
select (name + ' ' + lastname) as fullname, address from mytable group by name + ' ' + lastname
这只是一个例子,其中alias是基本串联的别名,但是有些串联更复杂,将其重写为组子句真的很难看。
最佳答案
子查询本身不太可能导致性能问题。查询规划器可能会重新排列查询,以便它最终根本不是子查询。查看性能计划将揭示查询实际发生的情况。
可能存在性能问题的是您正在根据计算值进行分组。这意味着数据库不能使用任何索引进行分组,因此它必须创建所有值然后对它们进行排序。
如果可能,您应该对计算中使用的值进行分组,例如:
select name + ' ' + lastname as fullname
from mytable
group by name, lastname
关于sql-server - 基本的sql server子查询,它如何影响性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14584357/