我有一个这样的存储过程:
ALTER PROCEDURE [dbo].[IBS_fetchrequested]
@tid integer = null,
@Tbaroced dbo.TBarcode readonly
as
begin
SET NOCOUNT ON;
if (select COUNT(*) from Khanger_tbl
where tid = @tid and requested = 1 and delivered = 0) > 0
begin
select
t.TBarcode, k.HBarcode as keyloc
from
Khanger_tbl k
inner join
transaction_tbl t on k.transactid = t.transactID
where
tid = @tid
and requested = 1
and delivered = 0
and t.Tbarcode not in (select carid from @Tbaroced)
and t.status = 3
end
end
在我的数据库中,我有大约2个缺少记录..如果我在tid
Khanger_tbl
添加索引,我的存储过程性能会提高吗?如何增加这些存储过程的性能?还有其他技术吗?
感谢任何帮助!
如果我添加索引,这将如何影响我的插入和更新? 我怎么能优化这个?
答案 0 :(得分:0)
为什么在运行查询之前检查是否存在数据? 只需运行查询,如果没有数据,您将获得一个空的记录集。您正在这样做的方式是两次读取数据表。
...而且,是的,如果没有索引,在tid
上放置索引会加快速度。它会轻微减慢插入速度。
对于data distribution
,对于表中的任何特定列,这与表中有多少记录包含该列中的每个值有关。
例如,对于像requested
这样的布尔coluimn,如果表中的数据分布只有一小部分记录具有requested
值= 1
,那么将索引放在`请求'会加快速度。
ALTER PROCEDURE [dbo].[IBS_fetchrequested]
@tid integer = null,
@Tbaroced dbo.TBarcode readonly
as
SET NOCOUNT ON;
Select t.TBarcode, k.HBarcode as keyloc
From Khanger_tbl k
Join transaction_tbl t
on t.transactid = k.transactID
Where tid = @tid
and requested = 1
and delivered = 0
and t.Tbarcode not in
(select carid from @Tbaroced)
and t.status = 3