繁体   English   中英

为什么SqlQuery比在视图上使用LINQ表达式快得多?

[英]Why is SqlQuery a lot faster than using LINQ expression on views?

我想从一个视图查询数据,这是一个包含583,000条记录的表的视图。 所以我写了一个简单的查询来从这个视图中查询

var uuid = "AB1-23456";
dbSet.SingleOrDefault(x => x.UserKey == uuid);

这是生成的sql

SELECT "Extent1"."UserKey" AS "UserKey", 
       CAST("Extent1"."IsDeleted" AS number(3,0)) AS "C1", 
       "Extent1"."FirstName" AS "FirstName", 
       "Extent1"."LastName" AS "LastName", 
       "Extent1"."UserLogin" AS "UserLogin", 
       "Extent1"."AccLocationKey" AS "AccLocationKey", 
       "Extent1"."CompanyKey" AS "CompanyKey"
FROM "UsersView" "Extent1"
WHERE ('AB1-23456' = "Extent1"."UserKey")

我运行了5次查询。 第一次调用花了我350ms ,下次调用平均花了我150ms这个查询太慢了,所以我把查询更改为这样

var queryString = 
    "SELECT \"Extent1\".\"UserKey\" AS \"UserKey\", " +
            "CAST( \"Extent1\".\"IsDeleted\" AS number(3,0)) AS \"IsDeleted\", " +
            "\"Extent1\".\"FirstName\" AS \"FirstName\", " +
            "\"Extent1\".\"LastName\" AS \"LastName\", " +
            "\"Extent1\".\"UserLogin\" AS \"UserLogin\", " +
            "\"Extent1\".\"AccLocationKey\" AS \"AccLocationKey\", " +
            "\"Extent1\".\"CompanyKey\" AS \"CompanyKey\" " +
    "FROM \"UsersView\" \"Extent1\" " +
    "WHERE ('AB1-23456' = \"Extent1\".\"UserKey\")";
dbSet.SqlQuery(queryString).SingleOrDefault();

我跑了5次第一次通话花了我40ms ,接下来的电话平均只花了我1ms

有没有人有任何想法我做错了什么?

环境

  • 实体框架5.0
  • Oracle 11g数据库
  • ODP.NET 11.2第3版
  • .NET Framework 4.5

是不是它第一次运行需要150ms? 每次连续呼叫都应该花费你所说的1ms左右。 LinqToSql必须首先编译查询以获取SQL。 看一下LinqToSql预编译查询的好处?

这是这个问题的最佳答案。

https://community.oracle.com/message/10481253

此问题不再有效。

var uuid = "AB1-23456";
dbSet.SingleOrDefault(x => x.UserKey == uuid);

花费的时间大约是150毫秒 但如果我试过

dbSet.SingleOrDefault(x => x.UserKey == "AB1-23456");

花费的时间回到1 毫秒 我会相应地问另一个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM