随笔分类 -  SQL

摘要:这篇文章是转发的,因为没读过RAID原理以及为什么要做RAID的文章,第一次看到解释的比较清楚的,所以转发。感谢原作者。原文地址如下:“http://www.cnblogs.com/CareySon/archive/2012/05/08/HowRAIDImpactSQLServer.html”简介 我们都听说过RAID,也经常作为SQL DBA、开发人员或构架师在工作中讨论RAID。但是,其实我们很多人都对RAID的原理,等级,以及RAID是如何影响SQL Server性能并不甚了解。 本篇文章就是为了补上这一课。磁盘构架 今天的磁盘,和70年代45rpm(转/分钟)的唱片机很像(你还能记得吗 阅读全文
posted @ 2012-12-17 17:34 honkcal 阅读(367) 评论(0) 推荐(1)
摘要:转之前注释:之前不知道merge的作用,是2008新增的功能,也没有使用过,去网站搜索得到这个比较好的有解释的。而这个关键字的最终用途,应该是在两个表之间有数据差异的时候,进行操作使用的,比如两个工资表不同,需要整合同时修改,这个时候用这个关键字会比较好,而不再麻烦的区写if else 等等。不知道还有没有其他更好的例子来形容这个 关键字,如有,请留言,感谢。(------------------------转发内容----------------------------------------------)简介 Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引 阅读全文
posted @ 2012-11-26 09:25 honkcal 阅读(268) 评论(0) 推荐(0)
摘要:1、建立数据库的SQL语句:use mastergouse mastergoif exists(select * from sys.databases where [name]='edu') --判断该数据是否存在 print '该数据库已经存在'else create database edu --创建数据库名为:eduonprimary(name='edu_data',filename='F:\edu\data\edudataa.mdf',size=20,maxsize=40,filegrowth=10%), --创建主文件组 阅读全文
posted @ 2012-11-23 09:38 honkcal 阅读(457) 评论(0) 推荐(0)
摘要:简介 分区表是在SQL SERVER2005之后的版本引入的特性。这个特性允许把逻辑上的一个表在物理上分为很多部分。而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个表做union操作. 分区表在逻辑上是一个表,而物理上是多个表.这意味着从用户的角度来看,分区表和普通表是一样的。这个概念可以简单如下图所示: 而对于SQL SERVER2005之前的版本,是没有分区这个概念的,所谓的分区仅仅是分布式视图: 本篇文章所讲述的分区表指的是SQL SERVER2005之后引入的分区表特性.为什么要对表进行分区 在回答标题的问题之前,需要说明的是,表分区这个特性只有.. 阅读全文
posted @ 2012-11-23 09:10 honkcal 阅读(245) 评论(0) 推荐(0)
摘要:简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能。但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索引的概念,需要了解大量原理性的知识,包括B树,堆,数据库页,区,填充因子,碎片,文件组等等一系列相关知识,这些知识写一本小书也不为过。所以本文并不会深入讨论这些主题。索引是什么 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 精简来说,索引是一种结构.在SQL Server中,索引和表(这里指的是加了聚集索引的表)的存储结构是一样的,都是B树,B树是一 阅读全文
posted @ 2012-11-22 14:36 honkcal 阅读(267) 评论(0) 推荐(0)
摘要:delete dbo.GI_Rep_Qty_Emp_Combine from dbo.GI_Rep_Qty_Emp_Combineleftjoin dbo.qGI_INP_EMP_CCSDON dbo.qGI_INP_EMP_CCSD.Employee=dbo.GI_Rep_Qty_Emp_Combine.Employeewhere GI_Rep_Qty_Emp_Combine.LedgerYear='2010'and GI_Rep_Qty_Emp_Combine.Quarter='1'andisnull(qGI_INP_EMP_CCSD.Employee,&# 阅读全文
posted @ 2012-11-21 11:55 honkcal 阅读(747) 评论(0) 推荐(0)
摘要:分类: Sql Server 2008 2009-08-10 09:28 206人阅读 评论(0) 收藏 举报在SQL Server中使用rollback会回滚所有的未提交事务状态,但是有些时候我们只需要回滚部分语句,把不需要回滚的语句提到事务外面来,虽然是个方法,但是却破坏了事务的ACID。其实我们可以使用SQL Server中的Savepoints来解决上述问题。示例如下:1.先建立测试表: CREATE TABLE [dbo].[ttt]( [Id] [int] NULL, [mark] [int] NULL ) 2.SQL 语句 begin tran insert into tt... 阅读全文
posted @ 2012-11-19 13:53 honkcal 阅读(372) 评论(0) 推荐(0)
摘要:SQL Server的性能主要取决于磁盘I/O效率,提高I/O效率某种程序上就意味着提高性能。SQL Server 2008提供了数据压缩功能来提高磁盘I/O。数据压缩意味着减小数据的有磁盘占用量,所以数据压缩可以用在表,聚集索引,非聚集索引,视图索引或是分区表,分区索引上。数据压缩可以在两个级别上实现:行级别和页级别。页级别压缩包括行级别压缩。表和索引在创建的同时就可以压缩,也可以使用Alter Table Rebuild With 或是 Alter Index Rebuild With语法压缩已存在表或是索引。当堆(Heap)上的压缩状态改变时,所有的非聚集索引也会重建。下面让我们看看压缩 阅读全文
posted @ 2012-11-19 13:52 honkcal 阅读(367) 评论(0) 推荐(0)
摘要:分类: Sql Server 2008 2010-03-04 11:42 1264人阅读 评论(4) 收藏 举报优化存储过程有很多种方法,下面介绍最常用的7种。1.使用SET NOCOUNT ON选项我们使用SELECT语句时,除了返回对应的结果集外,还会返回相应的影响行数。使用SET NOCOUNT ON后,除了数据集就不会返回额外的信息了,减小网络流量。2.使用确定的Schema在使用表,存储过程,函数等等时,最好加上确定的Schema。这样可以使SQL Server直接找到对应目标,避免去计划缓存中搜索。而且搜索会导致编译锁定,最终影响性能。比如select * from dbo.Tes 阅读全文
posted @ 2012-11-19 13:43 honkcal 阅读(352) 评论(0) 推荐(0)
摘要:问题重现:--建表语句,测试数据 create table TestTable(Id int, Name nvarchar(20),CreateTime datetime) go declare @Count int = 1 while(@Count<1000) begin insert into TestTable select @Count,'Name '+CAST(@Count as nvarchar(10)),DATEADD(day,@Count,GETDATE()) set @Count = @Count+1; end go --建索引 create clust 阅读全文
posted @ 2012-11-19 09:33 honkcal 阅读(4759) 评论(0) 推荐(0)
摘要:今天使用Merge语句时遇到了一个问题,当源表数据集为空时,merge就不工作了。下面举一个例子来具体说明一下:有两个表SourceTable为登陆表,TargetTable为授权表,如果访问用户在登陆表中,更新授权表的授权级别,否则授权0表示游客。sql语句如下:--SourceTable为登陆表,TargetTable为授权表--如果访问用户在登陆表中,更新授权表的授权级别,否则授权0表示游客。create table SourceTable(UserName nvarchar(10),Pwd int,[Level] int)create table TargetTable(UserNam 阅读全文
posted @ 2012-11-19 09:30 honkcal 阅读(918) 评论(0) 推荐(0)
摘要:在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题。下面介绍SQL Server支持的两种批量数据插入方法:Bulk和表值参数(Table-Valued Parameters)。运行下面的脚本,建立测试数据库和表值参数。[c-sharp] view plaincopyprint?--CreateDataBasecreatedatabaseBulkTestDB;gouseBulkTestDB;go--CreateTableCreatetableBulkTestTable(Idintprim. 阅读全文
posted @ 2012-11-19 09:29 honkcal 阅读(375) 评论(0) 推荐(0)
摘要:熟练使用SQL Server中的各种用法会给查询带来很多方便。今天就介绍一下EXCEPT和INTERSECT。注意此语法仅在SQL Server 2005及以上版本支持。EXCEPT是指在第一个集合中存在,但是不存在于第二个集合中的数据。INTERSECT是指在两个集合中都存在的数据。测试如下:[c-sharp] view plaincopyprint?createtablet1(idint,markchar(2))gocreatetablet2(idint,markchar(2))goinsertintot1select1,'t1'unionallselect2,'t 阅读全文
posted @ 2012-11-19 09:28 honkcal 阅读(2338) 评论(0) 推荐(0)
摘要:(下面是转发)数据库表A有十万条记录,查询速度本来还可以,但导入一千条数据后,问题出现了。当选择的数据在原十万条记录之间时,速度还是挺快的;但当选择的数据在这一千条数据之间时,速度变得奇慢。凭经验,这是索引碎片问题。检查索引碎片DBCC SHOWCONTIG(表),得到如下结果:DBCC SHOWCONTIG 正在扫描 'A' 表...表: 'A'(884198200);索引 ID: 1,数据库 ID: 13已执行 TABLE 级别的扫描。- 扫描页数.....................................: 3127- 扫描扩展盘区数.... 阅读全文
posted @ 2012-10-12 16:38 honkcal 阅读(436) 评论(0) 推荐(0)
摘要:查看 sql server 连接数的指令为:sp_who 、 sp_who active 、sp_who2 和 sp_who2 active,至于其中的区别,请大家search一下,这里不再解释了(附带的转发东西)由于公司最近两个Web站点做了负载均衡,但是缓存机制仍然是 Asp.Net 自带的缓存,这样就导致了每台Web 服务器内存中都有一份缓存,直接导致了多次请求DB数据库,造成了DB连接数过高。由于是两个较大的站点两台服务器做负载均衡(负载平衡),所以,DB 的连接数也飙升,几乎翻了3倍。公司DB服务器用的是 Sql Server 2008 R2 ,并且DB服务器配置是相当的强悍的,连接 阅读全文
posted @ 2012-10-12 16:02 honkcal 阅读(631) 评论(0) 推荐(0)
摘要:今天早晨遇到问题,一个表有数据,查询能出来,插入怎么都插入不进去,update也是失败,delete也是失败。最后突然好了,也没找到原因,郁闷死。估计就是思索等问题导致,于是查了一下。下面的是复制的。转发的。Sys.SysProcesses 系统表是一个很重要的系统视图,主要用来定位与解决Sql Server的阻塞和死锁。MSDN:包含正在 SQL Server 实例上运行的进程的相关信息。这些进程可以是客户端进程或系统进程。视图中主要的字段:1. Spid:Sql Servr 会话ID2. Kpid:Windows 线程ID3. Blocked:正在阻塞求情的会话 ID。如果此列为 Null 阅读全文
posted @ 2012-10-12 15:58 honkcal 阅读(3385) 评论(0) 推荐(0)
摘要:前阵子上数据中心的课程,老师讲解了些磁盘阵列(RAID)的不少知识,隔了两周了,回顾下的。磁盘阵列(Redundant Arrays of Inexpensive Disks,RAID)原理是利用数组方式来作磁盘组,配合数据分散排列的设计,提升数据的安全性。缓存 磁盘阵列作为独立系统在主机外直连或通过网络与主机相连。磁盘阵列有多个端口可以被不同主机或不同端口连接。一个主机连接阵列的不同端口可提升传输速度。和目前PC用单磁盘内部集成缓存一样,在磁盘阵列内部为加快与主机交互速度,都带有一定量的缓冲存储器。主机与磁盘阵列的缓存交互,缓存与具体的磁盘交互数据。在应用中,有部分常用的数据是需要经常读取. 阅读全文
posted @ 2012-07-23 19:46 honkcal 阅读(372) 评论(0) 推荐(0)