sql server 重复校验查询优化
我这有张表,用于存放每天出库的产品序列号,录入前须验证数据表里面有没有重复的序列号,有则不能录入数据。现在表里已经由100万条数据了,重复查询速度变的很慢,序列号为WX201106101234 的字符串。前面几位是年月日,后面四位是流水号。各位有没有好的方法优化一下,急等。。。。。
作者: qcy8816468 发布时间: 2011-06-11
序列号字段加索引判断
SQL code
SQL code
if exists(select 1 from tb where 序列号='WX201106101234') return else insert into tb ...
作者: zy112429 发布时间: 2011-06-11
-- 每天的序列号都是从1开始么?还是随机的?
-- 像这么大的表,应该有一个记录的创建日期字段,且应该用分区表(按日期月份分区) + 本地分区索引,那样的话:你去查询序列号存不存在,就不用去全表扫描查找,而是查找指定的分区就行啦!
-- 像这么大的表,应该有一个记录的创建日期字段,且应该用分区表(按日期月份分区) + 本地分区索引,那样的话:你去查询序列号存不存在,就不用去全表扫描查找,而是查找指定的分区就行啦!
作者: luoyoumou 发布时间: 2011-06-11
我是用存储过程查询重复
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[序列号重复查询]
@serialnum varchar(50),
@i int=0 output
as
if exists (select * from [序列号统计] where serialnum=@serialnum and deleted=1)
begin
set @i=1
end
else
begin
set @i=0
end
表里面有时间的字段,分区表应该怎么做,我是新手。。。
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[序列号重复查询]
@serialnum varchar(50),
@i int=0 output
as
if exists (select * from [序列号统计] where serialnum=@serialnum and deleted=1)
begin
set @i=1
end
else
begin
set @i=0
end
表里面有时间的字段,分区表应该怎么做,我是新手。。。
作者: qcy8816468 发布时间: 2011-06-11