簡體   English   中英

EF和LINQ查詢數據庫速度

[英]EF and LINQ query to database speed

我只是想知道我是在浪費時間還是有什么我可以改進此查詢的方法,從而可以提高性能。

在存儲庫中,我正在嘗試獲取10個最新商品

    public List<entity> GetTop10
    {
        get
        {
            return m_Context.entity.Where(x => x.bool == false).OrderByDescending(x => x.Created).Take(10).ToList();
        }
    }

但這要花費很長時間,因為其查詢表中有超過11000行。 所以我的問題是,無論如何我是否可以加快這種查詢的速度?

我正在嘗試在性能方面使用SQL帽子,我知道順序會降低它的速度,但是如何獲得相同的結果?

謝謝

您發布的特定查詢是使用篩選索引的潛在候選者。 假設您有一個SQL表:

CREATE TABLE Employees
(
    ID INT IDENTITY(1,1) PRIMARY KEY,
    Name NVARCHAR(100),
    IsAlive BIT
)

您可以想象,一般來說,您只想查詢尚未死亡的員工,因此最終會出現如下SQL:

SELECT Name FROM Employees WHERE IsAlive = 1

因此,為什么不創建過濾索引:

CREATE INDEX IX_Employees_IsAliveTrue 
ON Employees(IsAlive) 
WHERE IsAlive = 1

因此,現在查詢表時,它將使用該索引,該索引可能只占表的一小部分,尤其是如果您最近有一次僵屍入侵,而現在90%的員工已經死了。

但是,這樣的實體框架:

var nonZombies = from e in db.Employees
                 where e.IsAlive == true
                 select e;

可能無法使用索引(SQL在過濾索引和參數化查詢方面存在問題)。 為了解決這個問題,您可以在數據庫中創建一個視圖:

CREATE VIEW NonZombies
AS
SELECT ID, Name, IsAlive FROM Employees WHERE IsAlive = 1

現在,您可以將其添加到框架中(操作方式將取決於您是否首先使用代碼/模型/數據庫而有所不同),並且現在您可以決定哪些雇員值得緊急關注(例如優先獲得食物和武器) :

var nonZombies = from e in db.NonZombies
                 select e;

從您的LINQ查詢中將創建類似於以下內容的SQL SELECT:

SELECT TOP(10) * FROM entity
WHERE bool = 0
ORDER BY Created DESC

之所以類似,是因為服務器將選擇具體的列而不是'*'來將它們映射到實體對象。

如果這對您來說太慢了。 該錯誤在數據庫中,而不在EntityFramework中。 因此,嘗試向表中添加一些索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM