小编Nic*_* P.的帖子

.Net继承和方法重载

这是一个代码示例:

class Program
{
    static void Main(string[] args)
    {
        var obj = new DerivedClass();
        obj.SomeMethod(5);
    }
}

class BaseClass
{
    internal void SomeMethod(int a) { }
}

class DerivedClass : BaseClass
{
    internal void SomeMethod(long a) { }
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下为什么派生类调用的方法(而不是基类方法)?我需要详细解释这种情况.我将非常感谢任何有用文章的链接.

谢谢.

.net c# inheritance overloading

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

ROW_NUMBER() OVER PARTITION 优化

我有以下查询:

SELECT *
FROM
(
    SELECT *,
        ROW_NUMBER() OVER(PARTITION BY Code ORDER BY Price ASC) as RowNum
    from Offers) r
where RowNum = 1
Run Code Online (Sandbox Code Playgroud)

Offers 表包含大约 1000 万条记录。但是那里只有大约 4000 个不同的代码。所以我需要为每个代码获取价格最低的行,结果中只有 4000 行。

我在 INCLUDE 语句中有一个关于(代码、价格)列的索引以及所有其他列。

查询运行 2 分钟。如果我查看执行计划,我会看到具有 10M 实际行的索引扫描。所以,我猜它会扫描整个索引以获得所需的值。

为什么 MSSQL 要做全索引扫描?是因为子查询需要整个数据吗?如何避免这种扫描?是否有仅处理分区中第一行的 SQL 提示?

还有其他方法可以优化此类查询吗?

t-sql query-performance sql-server-2012

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