小编Gra*_*tzy的帖子

连接条件中的SQL筛选条件或更高效的where子句

我有一个相对简单的查询连接两个表."Where"标准可以在连接标准中表示,也可以表示为where子句.我想知道哪个更有效率.

查询是从一开始就查找推销员的最大销售额.

情况1

select salesman.salesmanid, max(sales.quantity)
from salesman
inner join sales  on salesman.salesmanid =sales.salesmanid 
                  and sales.salesdate < salesman.promotiondate
group by salesman.salesmanid 
Run Code Online (Sandbox Code Playgroud)

案例2

select salesman.salesmanid, max(sales.quantity)
from salesman
inner join sales  on salesman.salesmanid =sales.salesmanid 
where sales.salesdate < salesman.promotiondate
group by salesman.salesmanid 
Run Code Online (Sandbox Code Playgroud)

注意案例1完全没有where子句

RDBMS是Sql Server 2005

编辑 如果第二部分连接条件或where子句是sales.salesdate <某个固定日期,那么它实际上没有任何加入这两个表的条​​件会改变答案.

sql sql-server join where-clause

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

SQL 2005 CTE与TEMP表在其他表的连接中使用时的性能

我有一个复杂的查询,我需要在后续查询(实际更新语句)中使用.我尝试过使用CTE和临时表.使用CTE的性能与临时表方法相比非常糟糕.它像15秒对毫秒.为了简化测试而不是在后续查询中加入CTE/Temp表,我只是从中选择了*.在那种情况下,他们执行相同的操作

我已经查看了两种方法的执行计划,这两种方法都使用了后续查询中的连接,然后只需选择*.与简单选择查询计划大致相同,但在后续选择连接时查询计划不是.具体来说,用于创建和填充临时表的查询计划部分保持不变,而用于创建和填充CTE的查询计划部分随后在具有连接的查询中使用时会发生显着变化.

我的问题是为什么CTE的创建和填充的查询计划根据临时表的后续使用方式而改变.同样在什么情况下,CTE会比临时表产生更好的性能?

*注意我也使用了表变量,它与临时表方法相当.

谢谢

sql t-sql sql-server sql-server-2005 common-table-expression

12
推荐指数
2
解决办法
2万
查看次数

Nlog目标数据库在运行时设置连接信息

使用Nlog和数据库目标,是否可以在运行时设置连接信息?

c# nlog

4
推荐指数
1
解决办法
2797
查看次数

使用where子句中的select max()函数改进Sql查询

此查询的目的是恢复销售产品的产品及其价格,价格应该从最接近但不等于传递日期的日期开始,基本上是最近可用的价格.每天都没有价格记录.在where子句中使用聚合select语句有点不对劲.有一个更好的方法吗?也许在加入标准?

        select  
        p.ProductName,
        pp.Price,
        pp.Date,
        from product p
        inner join productprice pp  on p.productid = pp.productid
        where 
        pp.evaluationdate = (select  max(Date) from productprice 
                             where productid = p.productid  
                             and date < @DateIn) 
        and p.producttype = 'OnSale'
Run Code Online (Sandbox Code Playgroud)

实际的查询有点复杂,但这基本上是问题所在.感谢您的输入.

编辑 将返回多个产品

编辑 我正在试验@Remus Rusanu和@ km的建议(虽然@Remus Rusanu删除了他的)三个,包括我原来的,在性能方面似乎差不多.我试图决定一个人是否以其他一些无形的方式提供优惠,即维护,自我记录等,因为这将由其他人维持.再次感谢.

sql t-sql sql-server sql-server-2005

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

开源金融图书馆特别成熟到期

有没有人知道一个实现到期收益率和其他固定收益计算的开源金融图书馆?该库需要从.Net调用.

.net c# yield financial

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