sql-server - 基本的sql server子查询,它如何影响性能?

标签 sql-server

此 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/

相关文章:

sql-server - 如何在 SQL Server 2000 中从用户定义的函数调用存储过程

java - JDBC java.sql.Date() 比较给出 false

c# - 更新查询不更新数据库中的任何内容

mysql - 选择所有子项仅包含相同值且没有其他情况的行

sql-server - LINQ To SQL可以生成无效的SQL吗?

sql - 如何在 SQL Server 中更新表并添加列值?

sql-server - SSIS导入Excel数据

sql - 在 SQL 查询中加入条件语句

c# - 获取表的列名并将它们存储在字符串或 var c# asp.net 中

c# - ORA-01005 : null password given; logon denied