问题:

1、同一段代码,在存储过程中运行比普通SQL执行速度慢几十倍

原理:

在SQL Server中有一个叫做 “Parameter sniffing”参数嗅探的特性。SQL Server在存储过程执行之前都会制定一个执行计划,导致速度较慢。

解决方式:

我在实际中只使用了方法1,即可解决问题

1、在存储过程中创建一个变量替换掉参数

CREATE PROC sp_yp_jxctj
@varTemp1 VARCHAR(50)
AS
BEGIN
--用变量替换掉参数,以防出现“Parameter sniffing”问题
DECLARE @var1 VARCHAR(50) = @varTemp1
--下面对参数的引用,都引用@var1,不要引用@varTemp1 END;

2、将受影响的sql语句隐藏起来,比如:

a) 将受影响的sql语句放到某个子存储过程中,比如我们在@thedate设置成为今天后再调用一个字存储过程将@thedate作为参数传入就可以了。

b) 使用sp_executesql来执行受影响的sql。执行计划不会被执行,除非sp_executesql语句执行完。

c) 使用动态sql(”EXEC(@sql)”来执行受影响的sql。

2、数据库日志文件过大,备份后还原耗时长

解决办法:

1、分离数据库——>删除日志文件——>附加数据库

缺点:风险大,过程久,有时候分离不成功

2、在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完整模式,一定必务要再改回完整模式,不然数据库就不支持时间点备份了。

  • 选择数据库–属性—选项—恢复模式–选择简单。
  • 收缩数据库后,再调回完整
  • 使用命令
USE[master]
GO
ALTER DATABASE 要清理的数据库名称 SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE 要清理的数据库名称 SET RECOVERY SIMPLE --简单模式
GO
USE 要清理的数据库名称
GO
DBCC SHRINKFILE (N'要清理的数据库名称_log' , 2, TRUNCATEONLY) --设置压缩后的日志大小为2M,可以自行指定
GO
USE[master]
GO
ALTER DATABASE 要清理的数据库名称 SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE 要清理的数据库名称 SET RECOVERY FULL --还原为完全模式
GO

实例

1、保留小数

Convert(decimal(18,2),@num)

2、收缩数据库日志

USE [master]
GO
ALTER DATABASE DBName SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE DBName SET RECOVERY SIMPLE
GO
USE DBName
GO
DBCC SHRINKFILE (N'DBName_Log' , 11, TRUNCATEONLY)
--GO 查找日志名称
--USE DBName
--SELECT file_id, name FROM sys.database_files;
GO
USE [master]
GO
ALTER DATABASE DBName SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE DBName SET RECOVERY FULL
GO

3、查找数据库中某字段在哪些表有出现

SELECT COLUMN_NAME,TABLE_NAME FROM INFORMATION_SCHEMA.columns WHERE COLUMN_NAME='test_name'

4、查找数据并存放到临时表

if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#临时表名') and type='U')
DROP TABLE #临时表名
select * insert into #临时表名 from A

5、创建临时表

if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#物料汇总表') and type='U')
DROP TABLE #物料汇总表
create table #物料汇总表
(
[Recnum] [decimal](, ) IDENTITY(,) NOT NULL,
记录 [decimal](, ) ,
需求类型 [nvarchar]() NULL,
库存总量 decimal(26, 8) NULL default 0
)

6、select行号

select IDENTITY(int, 1,1) as 行号 

7、select分组编号

select row_number()over(partition by 分组列 order by 排序列) From A

8、查找小写字母

SELECT * FROM @t WHERE v LIKE '%[a-z]%' COLLATE chinese_prc_bin

9、时间相关

declare @日期 datetime
set @日期 = getdate()
select @日期
select @日期 = CONVERT(varchar(100), @日期, 111)
select @日期
select @日期 = CONVERT(datetime,CONVERT(varchar(100), @日期, 111))
select @日期
select @日期 = DATEADD(DAY,1,@日期)
select @日期
select DATEDIFF(DAY,@日期,getdate())

10、自定义排序

select * from teble_exaple order by
(
case class
when 'C' then 1,
when 'A' then 2
else '' end
)

11、游标写法

    --申明一个游标
DECLARE TotalCursor CURSOR
FOR select 编号,数量,内容 from #Print_ProductQRCode记录表
--打开一个游标
OPEN TotalCursor
--循环一个游标
DECLARE @编号 nvarchar(300),@数量 int,@明细内容 nvarchar(MAX)
FETCH NEXT FROM TotalCursor INTO @编号,@数量,@明细内容
WHILE @@FETCH_STATUS =0
BEGIN while @数量>0
begin
insert into #Print_ProductQRCode打印内容
select null,@编号,@明细内容
set @数量 = @数量 - 1
End FETCH NEXT FROM TotalCursor INTO @编号,@数量,@明细内容
END
--关闭游标
CLOSE TotalCursor
--释放资源
DEALLOCATE TotalCursor

12、分组链接字符串

Select ItemNo,stuff(
(select ','+ValueName from ItemAttributeSet where ItemNo=A.ItemNo
for XML path('')),1,1,''
)
from ItemAttributeSet A
group by ItemNo

13、查看数据库ID

select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files
where database_id=db_id(N'数据库名');

最新文章

  1. CSS布局 - 三栏布局
  2. Oracle11g的最佳灵活体系结构OFA
  3. 一个百万数量级的mysql实例
  4. Mac & XCode 使用技巧总结
  5. php全角字符转换为半角函数
  6. erl0006 - erlang 查看进程状态,查看当前系统那些进程比较占资源
  7. WebApp开发:ajax请求跨域问题的解决
  8. .net code injection
  9. [转帖]AVS音视频编解码技术了解
  10. python进阶八_警告和异常
  11. c#简单易用的短信发送服务 悠逸企业短信服务
  12. 图解RAID 0, RAID 1, RAID 5, RAID 10
  13. FFmpeg Basic学习笔记(3)
  14. Android实现图片缩放示例
  15. 用C链表实现约瑟夫环问题
  16. #Leetcode# 692. Top K Frequent Words
  17. querySelectorAll 和 getElementBy 方法的区别
  18. 2015 百度之星 1004 KPI STL的妙用
  19. 关于fpga优化的set input delay 和 set output delay
  20. 使用cout进行格式化

热门文章

  1. 20175126《Java程序设计》第十周学习总结
  2. nginx配置-location
  3. CSS-给Font Awesome拓展Base64编码的图标
  4. Python 进阶_OOP 面向对象编程_实例属性和方法
  5. SPRING CLOUD微服务DEMO-上篇
  6. Php安装时出现的问题处理
  7. upc组队赛15 Lattice's basics in digital electronics【模拟】
  8. 【读书笔记】:MIT线性代数(2):Vector Spaces and Subspaces
  9. VS2013编译程序出现error C4996: 'std::_Fill_n': Function call with parameters that may be unsafe
  10. SAP内表查询速度优化实例-OPEN SQL