Linq to sql SQL-使此语句更快,即持续时间更短,读取次数更少
鉴于下表:Linq to sql SQL-使此语句更快,即持续时间更短,读取次数更少,linq-to-sql,sql,Linq To Sql,Sql,鉴于下表: Orders (OrderID, OrderStatus, OrderNumber) OrderItems(OrderItemID, OrderID, ItemID, OrderItemStatus) 订单:2537份 订购项目:1319项记录 我已经在上创建了索引 订单(订单状态) OrderItems(OrderID) OrderItems(OrderItemStatus) 我有以下SQL语句(由LinqToSql生成),执行该语句时: -持续时间=8789 -读数=7809
Orders (OrderID, OrderStatus, OrderNumber)
OrderItems(OrderItemID, OrderID, ItemID, OrderItemStatus)
订单:2537份
订购项目:1319项记录
我已经在上创建了索引
exec sp_executesql N'SELECT COUNT(*) AS [value]
FROM [dbo].[Orders] AS [t0]
WHERE ([t0].[OrderStatus] = @p0) OR (EXISTS(
SELECT NULL AS [EMPTY]
FROM [dbo].[OrderItems] AS [t1]
WHERE ([t1].[OrderID] = [t0].[OrderID]) AND ([t1].[OrderItemStatus] = @p1)
))',N'@p0 nvarchar(2),@p1 nvarchar(2)',@p0=N'KE',@p1=N'KE'
还有什么我可以做得更快的吗?如果表中的列是varchars,则将所有这些nvarchars参数设置为varchars
))',N'@p0 varchar(2),@p1 varchar(2)',@p0=N'KE',@p1=N'KE'
另请参见此处:如果表中的列是varchars,则将所有这些nvarchars参数设置为varchars
))',N'@p0 varchar(2),@p1 varchar(2)',@p0=N'KE',@p1=N'KE'
另请参见此处:使用单个索引而不是*使用单个索引而不是*这可能会生成更好的sql
IQueryable<int> query1 =
from oi in db.OrderItems
where oi.OrderItemStatus == theItemStatus
select oi.OrderID;
IQueryable<int> query2 =
from o in db.Orders
where o.OrderStatus == theOrderStatus
select o.OrderID;
IQueryable<int> query3 = query1.Concat(query2).Distinct();
int result = query3.Count();
IQueryable查询1=
来自db.OrderItems中的oi
其中oi.OrderItemStatus==ItItemStatus
选择oi.OrderID;
可查询的查询2=
以db.订单形式从o开始
其中o.OrderStatus==theOrderStatus
选择o.OrderID;
IQueryable query3=query1.Concat(query2.Distinct();
int result=query3.Count();
这可能会生成更好的sql
IQueryable<int> query1 =
from oi in db.OrderItems
where oi.OrderItemStatus == theItemStatus
select oi.OrderID;
IQueryable<int> query2 =
from o in db.Orders
where o.OrderStatus == theOrderStatus
select o.OrderID;
IQueryable<int> query3 = query1.Concat(query2).Distinct();
int result = query3.Count();
IQueryable查询1=
来自db.OrderItems中的oi
其中oi.OrderItemStatus==ItItemStatus
选择oi.OrderID;
可查询的查询2=
以db.订单形式从o开始
其中o.OrderStatus==theOrderStatus
选择o.OrderID;
IQueryable query3=query1.Concat(query2.Distinct();
int result=query3.Count();
你能说明为什么会这样吗?你能证明为什么会这样吗?