小编Thi*_*ave的帖子

由于派生表,实体框架很慢

我使用MySQL Connector/Net 6.5.4与LINQ实体,我经常得到糟糕的查询性能,因为实体框架生成使用派生表的查询.

这是我多次遇到的简化示例.在C#中,我写了一个这样的查询:

var culverCustomers = from cs in db.CustomerSummaries where cs.Street == "Culver" select cs;
// later...
var sortedCustomers = culverCustomers.OrderBy(cs => cs.Name).ToList();
Run Code Online (Sandbox Code Playgroud)

而不是像这样生成简单的查询:

SELECT cust.id FROM customer_summary cust WHERE cust.street = "Culver" ORDER BY cust.name
Run Code Online (Sandbox Code Playgroud)

实体框架使用派生表生成一个查询,如下所示:

SELECT Project1.id FROM (
    SELECT cust.id, cust.name, cust.street FROM customer_summary cust
    WHERE Project1.street = "Culver"
) AS Project1 -- here is where the EF generates a pointless derived table
ORDER BY Project1.name
Run Code Online (Sandbox Code Playgroud)

如果我解释两个查询,我得到第一个查询:

id, select_type, table, type, possible_keys, rows
1,  PRIMARY, …
Run Code Online (Sandbox Code Playgroud)

c# mysql linq-to-entities entity-framework database-performance

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