关于SQL

set nocount on 作用

阻止在结果集中返回显示受t-sql语句影响的行计数信息

set nocount on 不返回计数,set nocount off 返回计数

即使当set nocount on 时也更新@@rowcount

当set nocount on 时将不向客户端发送存储过程每个语句的done_in_proc 消息,如果存储过程中包含一些并不返回实际数剧的语句,网络通信流量便会大量减少,可以显著提高应用程序性能;

set nocount 指定的设置时在执行或运行时候生效,分析时候不生效

 

create table [dbo].[xima_ptypepath]
(
[ptypepathid] [int] identity(1,1) not null,
[ptypeid] [varchar](50) null,
[ptypepathname] [varchar](max) null,
[ptypepathtypeid] [varchar](max) null,
constraint [pk_xima_ptypepath] primary key clustered 
(
[ptypepathid] asc
)
with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]
) on [primary]

pad_index = { on | off }

如果为 on,则 fillfactor 指定的可用空间百分比将应用于该索引的中间级别页。如果未指定 off 或 fillfactor 值,则考虑到中间级别页的键集,将中间级别页填充到一个近似容量,以留出足够的空间来容纳至少一个索引的最大行。默认值为 off。

fillfactor = fillfactor

指定一个百分比,指示在创建或更改索引期间,数据库引擎对各索引页的叶级填充的程度。fillfactor 必须为介于 1 至 100 之间的整数值。默认值为 0。填充因子的值 0 和 100 在所有方面都是相同的。

statistics_norecompute = { on | off }

如果为 on,则过期的索引统计信息不会自动重新计算。如果为 off,则启用自动统计信息更新。默认值为 off。

ignore_dup_key = { on | off }

指定在插入操作尝试向唯一索引插入重复键值时的错误响应。ignore_dup_key 选项仅适用于创建或重新生成索引后发生的插入操作。当执行 create index、alter index 或 update 时,该选项无效。默认值为 off。

on 向唯一索引插入重复键值时将出现警告消息。只有违反唯一性约束的行才会失败。

off 向唯一索引插入重复键值时将出现错误消息。整个 insert 操作将被回滚。

对于对视图创建的索引、非唯一索引、xml 索引、空间索引以及筛选的索引,ignore_dup_key 不能设置为 on。

若要查看 ignore_dup_key,请使用 sys.indexes。

在向后兼容的语法中,with ignore_dup_key 等效于 with ignore_dup_key = on。

allow_row_locks = { on | off }

如果为 on,则访问索引时允许使用行锁。数据库引擎确定何时使用行锁。如果为 off,则不使用行锁。默认值为 on。

allow_page_locks = { on | off }

如果为 on,则访问索引时允许使用页锁。数据库引擎确定何时使用页锁。如果为 off,则不使用页锁。默认值为 on。

on { filegroup | default }

用来指定存储表的文件组。如果指定filegroup,则表将存储在指定的文件组中,数据库中必须存在该文件组。如果指定default,或者根本未指定on参数,则表存储在默认文件组中。(default并不是关键字,default是默认文件组的标识符并需对其进行

定界,如on "default"、on [default])

on [primary]表示表是建立在主文件组上。primary表示主文件组。如果没有默认文件组,则主文件组是默认文件组,on [primary]也可以省略掉了。

主文件组(primary)

用户定义文件组默认文件组同为文件组的一种类型

其包含主要数据文件和任何没有明确指派给其他文件组的其他文件。系统表的所以页均分配在主文件组

 

set ansi_padding on
go
print 'testing with ansi_padding on'
gocreate table t1 
(charcol char(16) null, 
varcharcol varchar(16) null, 
varbinarycol varbinary(8))
go
insert into t1 values ('no blanks', 'no blanks ', 0x00ee)
insert into t1 values ('trailing blank', 'trailing blank ', 0x00ee00)
​
select 'char'='>' + charcol + '<', 'varchar'='>' + varcharcol + '<',
varbinarycol
from t1
goset ansi_padding off
go
print 'testing with ansi_padding off'
gocreate table t2 
(charcol char(16) null, 
varcharcol varchar(16) null, 
varbinarycol varbinary(8))
go
insert into t2 values ('no blanks', 'no blanks', 0x00ee)
insert into t2 values ('trailing blank', 'trailing blank', 0x00ee00)
​
select 'char'='>' + charcol + '<', 'varchar'='>' + varcharcol + '<',
varbinarycol
from t2
godrop table t1
drop table t2
go

set ansi_padding off

当设置为 on 时,不剪裁字符值中插入到 varchar 列的尾随空格和二进制值中插入到 varbinary 列的尾随零。不将值按列的长度进行填充。当设置为 off 时,剪裁 varchar 列的尾随空格和 varbinary 列的尾随零。该设置只影响新列的定义。 

set ansi_padding 为 on 时,将允许空值的 char(n) 和 binary(n) 列填充到列长,而当 set ansi_padding 为 off 时,将剪裁尾随空格和零。始终将不允许空值的 char(n) 和 binary(n) 列填充到列长。 

 

 

 

 

转载于:https://www.cnblogs.com/zhaoyl9/p/11490057.html

场景一: 确认1.碰到了一个一个非常慢的SQL server语句,发现是变量查询时很慢 SQL语句: DECLARE @SN VARCHAR(12) SET @SN = '30F335CD0045' SELECT [Mac2] FROM SF_Cp_Detail WHERE [Mac2] = @SN 确认2.查看索引是:唯一非聚集索引 CREATE UNIQUE NONCLUSTERED INDEX [IX_SF_CP_Detail_MAC2] ON [dbo].[SF_Cp_Detail] ( [Mac2] ASC ) WHERE ([MAC2]'' AND [MAC2] IS NOT NULL) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) GO 确认3.执行计划如下: 执行计划 SET STATISTICS IO ON ; (0 行受影响) Table 'SF_Cp_Detail'. Scan count 33, logical reads 1267942, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 场景二: 为什么用不到索引IX_SF_CP_Detail_MAC2]呢? 尝试1: 把唯一非聚集索引改为非聚集索引, Done,用到索引了. Drop index ……. CREATE NONCLUSTERED INDEX [IX_SF_Cp_Detail_Mac2] ON [dbo].[SF_Cp_Detail] ( [Mac2] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) GO 尝试2: 可是还需要验证唯一性怎么办呢? 试了半天未达到目标, 根据别人提示, 恢复唯一非聚集 CREATE UNIQUE NONCLUSTERED INDEX [IX_SF_CP_Detail_MAC2] ON [dbo].[SF_Cp_Detail] ( [Mac2] ASC ) WHERE ([MAC2]'' AND [MAC2] IS NOT NULL) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) GO 然后 修改查询: DECLARE @SN VARCHAR(12) SET @SN = '30F335CD0045' SELECT [Mac2] FROM SF_Cp_Detail WHERE [Mac2] = @SN option (recompile) 预计查询计划 看样子不行, 但是,看一下实际查询计划: OK ,Done,可以了. 尝试3. 但是我不可能去每个程序加option (recompile)呀, 而且随着数据量的增大,每次重新编译索引, 本身就导致SQL语句变慢. 最终解决方案: 唯一非聚集索引留着, 再添加一个 非聚集索引,保留两个索引, 终于搞定了. CREATE UNIQUE NONCLUSTERED INDEX [IX_SF_CP_Detail_MAC2] ON [dbo].[SF_Cp_Detail] ( [Mac2] ASC ) WHERE ([MAC2]'' AND [MAC2] IS NOT NULL) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) GO CREATE NONCLUSTERED INDEX [IX_SF_Cp_Detail_Mac2] ON [dbo].[SF_Cp_Detail] ( [Mac2] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值