文章分类 - SqlServer
摘要:1.视图不占物理存储空间,它只是一种逻辑对象。可将其看成一个"虚表" 视图是一个由select 语句指定,用以检索数据库表中某些行或列数据的语句存储定义注:创建视图语句中,不能包括order by、compute或者compute by 子句,也不能出现into关键字2.创建水平视图 视图的常见用法是限制用户只能够存取表中的某些数据行,用这种方法产生的视图称为水平视图,即表中行的子集create view student_view1asselect * from studentwhere (class_id='0903')3.创建投影视图 如果限制用户只能存
阅读全文
摘要:数据的分页是我们再熟悉不过的功能了,各种各样的分页方式层出不穷。今天我把一些常见的存储过程分页列出来,再简单地测一下性能,算是对知识的总结,也是对您好想法的抛钻引玉。废话不多说,开始吧~~1.首先建立一张测试表--创建测试表SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[testTable]( [id] [int] IDENTITY(1,1) NOT NULL, [testDate] [datetime] NOT NULL CONSTRAINT [DF_testTable_testDate] DEF...
阅读全文
摘要:很多朋友认为数据库在简单模式下,堆表误删除一条记录,是无法找回的,因为没有日志记录。其实不然,某种意义上是可以找回的,因为堆表在删除记录时,只更改了行偏移,实际数据没有被物理删除,所以利用这点,测试了下恢复数据,果然成功了,但是还有点问题没有研究出结果:除了更改偏移量,删除数据时还需要更改页眉,这点还没时间去琢磨,所以恢复数据时还要能推断出页眉的16进制对应关系,有兴趣的朋友可以分享下经验给我。废话不多说,测试的demo如下:测试环境: SQL Server 2008 R2 数据库:repl_test 简单模式 测试表:test_del测试步骤1.创建测试表test_del,并插入测试数...
阅读全文
摘要:select * from Awhere id in(select id from B)以上查询使用了in语句,in()只执行一次,它查出B表中的所有id字段并缓存起来.之后,检查A表的id是否与B表中的id相等,如果相等则将A表的记录加入结果集中,直到遍历完A表的所有记录.它的查询过程类似于以下过程List resultSet=[];Array A=(select * from A);Array B=(select id from B);for(int i=0;i<A.length;i++) { for(int j=0;j<B.length;j++) { if(A[i].id==
阅读全文
摘要:SQL如果复杂起来会很头疼的,特别是性能优化,涉及到很多cpu,内存知识,我写的这些只是点点滴滴,表面上的,没有理论支撑,没有深入,其实一直想找一本大部头读一读,就是没有时间和精力,只能遇到问题了总结一下,又遇到了就再总结一下。下面做一个目录,方便自己查阅,也勉励自己不断积累知识。 SQL点滴1—SET QUOTED_IDENTIFIER OFF语句的作用 SQL点滴2—重温sql语句中的join操作 SQL点滴3—一个简单的字符串分割函数 SQL点滴4—筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息 SQL点滴5—产生时间demention,主要是时间转换 SQ...
阅读全文
摘要:1.引言在列表查询时由于数据量非常多,一次性查出来会非常慢,就算一次查出来了,也不能一次性显示给客户端,所以要把数据进行分批查询出来,每页显示一定量的数据,这就是数据要分页。2.常用的数据分页方法我们经常会碰到要取n到m条记录,就是有分页思想,下面罗列一下一般的方法。我本地的一张表 tbl_FlightsDetail,有300多W记录,主键 FlightsDetailID(Guid),要求按照FlightsDetailID排序 取 3000001 到3000010 之间的10条记录,也是百万级。方法1 定位法 (利用ID大于多少)语句形式:select top 10 * from tbl_Fl
阅读全文
摘要:有例表:empemp_no name age 001 Tom 17 002 Sun 14 003 Tom 15 004 Tom 16要求:列出所有名字重复的人的记录(1)最直观的思路:要知道所有名字有重复人资料,首先必须知道哪个名字重复了:select name from emp group by name having count(*)>1所有名字重复人的记录是:select * from emp where name in (select name from emp group by name having count(*)>1)(2)稍微再聪明一点,就会想到,如果对每个名字都
阅读全文
摘要:--判断存储过程是否存在if exists(select * from sysobjects where id=object_id('[dbo].[存储过程名]') and xtype='P') DROP PROCEDURE [dbo].[存储过程名]GO--判断视图是否存在if exists(select * from sysobjects where name= '视图名' AND type = 'v ') DROP VIEW [dbo].[视图名]GO--判断睡自定义函数是否存在IF OBJECT_ID (N'[函数
阅读全文
摘要:简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理。二级存储(secondary storage) 对于计算机来说,存储体系是分层级的。离CPU越近的地方速度愉快,但容量越小(如图1所示)。比如:传统的计算机存储体系结构离CPU由近到远依次是:CPU内的寄存器,一级缓存,二级缓存,内存,硬盘。但同时离CPU越远的存储系统都会比之前的存储系统大一个数量级。比如硬盘通常要比同时代的内存大一个数量级。 图1.计算机存储体系 因此对于SQL Server来说,正常的生产系统所配置的内存通常不能装载所有数
阅读全文
摘要:SQL 查询性能优化----解决书签查找先来看看什么是书签查找: 当优化器所选择的非聚簇索引只包含查询请求的一部分字段时,就需要一个查找(lookup)来检索其他字段来满足请求。对一个有聚簇索引的表来说是一个键查找(key lookup),对一个堆表来说是一个RID查找(RID lookup)。这种查找即是——书签查找。 书签查找根据索引的行定位器从表中读取数据。因此,除了索引页面的逻辑读取外,还需要数据页面的逻辑读取。从索引的行定位器到从表中读取数据这之间会产生一些额外的开销,本文就来解决这个开销。先看下我的测试表结构: 其中可以看出 有一个 聚簇索引 PK_Us...
阅读全文
摘要:微软Sql server的Update语句,有个不错的扩展功能,通过允许变量赋值,可在语句中嵌入复杂的逻辑计算,从而让本来需要一个Select 加一个Update语句的段子,被优化成只需一个update语句。这对性能提高有不小的好处.但是,这项功能有个尚未报告且不易注意的bug.举例来说,下述形式都是合法的:Update table1 setcolumn1 = expr1, @var1 = expr2, @var2= column2 = expr3,...where where_condition为了说更透彻的说明问题, 看下面的语句:UPDATE dbo.TableX SET @oldDes
阅读全文
摘要:什么是索引拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K 。为了加快查找的速度,汉语字(词)典一般都有按拼音、笔画、偏旁部首等排序的目录(索引),我们可以选择按拼音或笔画查找方式,快速查找到需要的字(词)。同理,SQL Server允许用户在表中创建索引,指定按某列预先排序,从而大大提高查询速度。SQL Server中的数据也是按页( 4KB )存放索引:是SQL Server编排数据的内部方法。它为SQL Server提供一种方法来编排查询数据 。索引页:数据库中存储索引的数据页;索引页类似于汉语字(词)
阅读全文
摘要:select UserId,UserName,IsShowd,'Text'=(case IsShowd when 1 then '显示' else '隐藏' end) from ProductReviewsInfo
阅读全文
摘要:SQL语句精华大全asc按升序排列desc按降序排列下列语句部分是Mssql语句,不可以在access中使用。SQL分类:DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)首先,简要介绍基础语句:1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建备份数据的 deviceUSE mas
阅读全文
摘要:下表列出了 Transact-SQL 参考的语法关系图中使用的约定,并进行了说明。约定用于大写Transact-SQL 关键字。斜体用户提供的 Transact-SQL 语法的参数。粗体数据库名、表名、列名、索引名、存储过程、实用工具、数据类型名以及必须按所显示的原样键入的文本。下划线指示当语句中省略了包含带下划线的值的子句时应用的默认值。|(竖线)分隔括号或大括号中的语法项。只能使用其中一项。[ ](方括号)可选语法项。不要键入方括号。{ }(大括号)必选语法项。不要键入大括号。[,...n]指示前面的项可以重复n次。各项之间以逗号分隔。[...n]指示前面的项可以重复n次。每一项由空格分隔
阅读全文
摘要:1.1.1 摘要如果说要对数据库进行优化,我们主要可以通过以下五种方法,对数据库系统进行优化。1. 计算机硬件调优2. 应用程序调优3. 数据库索引优化4. SQL语句优化5. 事务处理调优在本篇博文中,我们将想大家讲述数据库中索引类型和使用场合,本文以SQL Server为例,对于其他技术平台的朋友也是有参考价值的,只要替换相对应的代码就行了!索引使数据库引擎执行速度更快,有针对性的数据检索,而不是简单地整表扫描(Full table scan)。为了使用有效的索引,我们必须对索引的构成有所了解,而且我们知道在数据表中添加索引必然需要创建和维护索引表,所以我们要全局地衡量添加索引是否能提高数
阅读全文
摘要:1 目的为了保证所每个项目组编写出的程序都符合相同的规范,便于理解和维护,便于检查、减少出错概率,有助于成员间交流,保证一致性、统一性而建立的SQL程序编码规范。2 范围该规范适用于所有需要基于SQL开发的项目。3 规范内容3.1命名规范3.1.1 总体命名规范l 名称的长度不超过32个字符。l 名称采用英文单词、英文单词缩写和数字,单词之间用“_”分隔。 说明:除非用户提供文档化的行业标准(例如,国标或部颁标准),否则不得违反本规范。l 数据库对象名称首字母必须小写。l 不得采用“_”作为名称的起始字母和终止字母。l 名称必须望文知意。l 名称不得与数据库管理系统保留字冲突。l 不要在对..
阅读全文
摘要:SQL Server 2005开始支持递归查询了。之前我们在保存一个树状结构的时候,常常采用在表格中增加一个ParentID这个字段保存其对应上级,但是这样的表格设计,在查询的时候,需要多次查询才能查询出所需要的结果,一般都需要程序来实现。现在不用了,SQL Server 2005支持递归查询了(Oracle和DB2早支持了)。写法如下:假设表中的上下级关系采用的是ID和ParentID字段来关联。with myT2 as(select * from表名Where根节点查询条件union allselect 表名.* from myT2 inner join表名 on myT2.ID=表名.P
阅读全文
摘要:【摘要】对SQL语句进行执行效率分析,特别针对有几种不同方案,但是在查询分析器中执行时间接近的情况。【内容】set statistics io on --打开IOset statistics time on -- 打开时间统计set statistics profile onselect .... -- 需要分析的SQL语句set statistics io offset statistics time offset statistics profile off这样一来,不同sql语句的执行时间,命令中的影响行数就会一目了然,方便我们深入的分析。
阅读全文
摘要:1.1.1 摘要Join是关系型数据库系统的重要操作之一,SQL Server中包含的常用Join:内联接、外联接和交叉联接等。如果我们想在两个或以上的表获取其中从一个表中的行与另一个表中的行匹配的数据,这时我们应该考虑使用Join,因为Join具体联接表或函数进行查询的特性本文将通过具体例子介绍SQL中的各种常用Join的特性和使用场合:目录Inner joinOuter joinCross joinCross applyCross apply 和 Inner join的区别Semi-join和Anti-semi-join1.1.2 正文首先我们在tempdb中分别定义三个表College、
阅读全文