我想从一个视图查询数据,这是一个包含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 !
有人有任何想法我做错了吗?
环境
答案 0 :(得分:4)
不是第一次运行只需<150>吗?每次连续呼叫都应该花费你所说的1ms左右。 LinqToSql必须首先编译查询以获取SQL。 看一眼 LinqToSql Precompiling queries benefit?
答案 1 :(得分:1)
这是这个问题的最佳答案。
答案 2 :(得分:0)
此问题不再有效。
var uuid = "AB1-23456";
dbSet.SingleOrDefault(x => x.UserKey == uuid);
花费的时间大约是 150ms 。但如果我试过
dbSet.SingleOrDefault(x => x.UserKey == "AB1-23456");
花费的时间回到 1ms 。我会相应地问另一个问题。