【数据库】一篇文章搞掂:SQL Server数据库
问题:
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'数据库名');
【数据库】一篇文章搞掂:SQL Server数据库的更多相关文章
- 【数据库】一篇文章搞掂:MySQL数据库
一.安装 使用版本:5.7(2018/08/03 阿里云的云数据库最高支持5.7,所以这里考虑用5.7) 下载版本:MySQL Community Server 5.7.23 下载地址:https:/ ...
- 【数据库】一篇文章搞掂:Oracle数据库
PL/SQL的使用 1.安装使用 1.1.安装暂略 1.2.使用 添加环境变量 打开PL/SQL,不要登录,进入界面后,打开设置Preference 设置主目录和OCI库
- SQL Azure (14) 将云端SQL Azure中的数据库备份到本地SQL Server
<Windows Azure Platform 系列文章目录> 注意: 1.只有SQL Server 2012 CU4及以上版本才支持本章内容 2.当你的数据库文件很大时,建议优化以下内容 ...
- SQL Server数据库邮件配置
一.数据库邮件介绍 数据库邮件是从SQL Server数据库引擎中发送电子邮件的企业解决方案,通过使用数据库邮件,数据库应用程序可以向用户发送电子邮件.邮件中可以包含查询结果,还可以包含来自网络中任何 ...
- SQL SERVER 数据库邮件配置
1.简单了解数据库邮件的概念和使用的传输协议及系统体系: 数据库邮件是从 SQL Server 数据库引擎中发送电子邮件的企业解决方案.通过使用数据库邮件,数据库应用程序可以向用户发送电子邮件.邮件中 ...
- SQL Server 数据库定时自动备份
原文:SQL Server 数据库定时自动备份 SQL Server 数据库定时自动备份——每天定时备份,保留前8天的备份 利用SQL Server代理新建作业来定期备份 1)在数据库库的[SQL S ...
- SQL Server 数据库项目
ylbtech-.NET Framework: SQL Server 数据库项目 SQL Server 数据库项目 类型:SQL Server 用于创建 SQL Server 数据库的项目 1. 新建 ...
- 【Java架构:基础技术】一篇文章搞掂:MyBatis
本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文主要总结于刘增辉的<MyBatisc从入门到精通>一书,有兴趣的朋友可以自行研读 建议仔细研读官方文档: http ...
- 第一章、关于SQL Server数据库的备份和还原(sp_addumpdevice、backup、Restore)
在sql server数据库中,备份和还原都只能在服务器上进行,备份的数据文件在服务器上,还原的数据文件也只能在服务器上,当在非服务器的机器上启动sql server客户端的时候,也可以通过该客户端来 ...
- 【学习记录】第一章 数据库设计-《SQL Server数据库设计和开发基础篇视频课程》
一.课程笔记 1.1 软件开发周期 (1)需求分析阶段 分析客户的业务和数据处理需求. (2)概要设计阶段 设计数据库的E-R模型图,确认需求信息的正确和完整. /* E-R图:实体-关系图(Ent ...
随机推荐
- Equivalent Prefixes
题目链接 题意:给你两个数组a,b,大小为n,让你寻找一个数p (1<= p <= n) ,使之在 1~p 任意一个区间中a,b数组的最小值下标相同. 思路:看到用线段树去写的我也是服了. ...
- ubuntu 配置jre后出现问题Error occurred during initialization of VM
百度了好久,找到了一个可以解决的办法. https://blog.51cto.com/chris2013/1313117 就是在usr/java/jre/lib/rt.pack需要解压成rt.jar ...
- nginx的配置系统
nginx的配置系统由一个主配置文件和其他一些辅助的配置文件构成.这些配置文件均是纯文本文件,全部位于nginx安装目录下的conf目录下. 配置文件中以#开始的行,或者是前面有若干空格或者TAB,然 ...
- (DP)HDU - 1003 Max Sum
这是一道DP入门题目,知识点是“最大连续子序列” 题目大意:给你一个长度为n的数字序列,取其中一段连续的序列,要求和最大: 分析:这是一道裸题,没有什么花里胡哨的东西,主要是写出状态转移方程 dp[i ...
- [题解]Yet Another Subarray Problem-DP 、思维(codeforces 1197D)
题目链接:https://codeforces.com/problemset/problem/1197/D 题意: 给你一个序列,求一个子序列 a[l]~a[r] 使得该子序列的 sum(l,r)-k ...
- Percona XtraDB Cluster集群5.7 开启SSL认证
mysqldump -uroot -p --ssl-cert=/data/mysql/client-cert.pem --ssl-key=/data/mysql/client-key.pem -h 1 ...
- Linux运维基础采集项
1. Linux运维基础采集项 做运维,不怕出问题,怕的是出了问题,抓不到现场,两眼摸黑.所以,依靠强大的监控系统,收集尽可能多的指标,意义重大.但哪些指标才是有意义的呢,本着从实践中来的思想,各位工 ...
- Linux下的tar压缩解压命令
tar 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个. -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 下 ...
- JavaScript 标准参考教程(alpha) 阮一峰
JavaScript 标准参考教程(alpha)http://javascript.ruanyifeng.com/#introduction
- ftp服务的安装
ftp服务的安装 1.环境准备 2.安装服务 3.配置文件 3.1.匿名访问 把以下三个匿名上传写入开启 启动并查看服务状态: Linux客户端访问: Tips: 220表示服务正常,可以登陆:230 ...