[英]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 !
有沒有人有任何想法我做錯了什么?
環境
是不是它第一次運行需要150ms? 每次連續呼叫都應該花費你所說的1ms左右。 LinqToSql必須首先編譯查詢以獲取SQL。 看一下LinqToSql預編譯查詢的好處?
這是這個問題的最佳答案。
此問題不再有效。
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.