随笔分类 - sqlserver基础
只有注册用户登录后才能阅读该文。
只有注册用户登录后才能阅读该文。
摘要:前言: 在第一次执行查询或者存储过程时,会创建执行计划并存储在SQLServer的过程缓存内存中。在很多时候,我们会执行一些简单的程序,仅仅执行一次,而为这些查询创建存储过程是非常浪费内存资源的。由于内存不足,可能会导致你的缓存溢出,从而影响性能。在2005之前,这是一个大问题,为了纠正这个问...
阅读全文
摘要:前言:如果碎片程度小于30%,建议使用重组而不是重建。因为重组不会锁住数据页或者数据表,并且降低CPU的资源。总得来说,重组会清空当前的B-TREE,特别是索引的叶子节点,重组数据页和消除碎片。和重建不同,重组不会添加任何新数据页。准备工作:为了了解是否有必要重组索引,需要首先查看碎片程度,如果在1...
阅读全文
摘要:前言:视图是一个包含了一个或多个表的数据列的虚拟表。通常情况下,它仅仅是存储了查询的对象,一个视图可以当作一个表,可以用于存储过程、JOIN、用户自定义函数等等。视图包含了下面两个主要特性:1、提供了一个安全机制,用于限制用户只能访问特定的数据。2、使得开发人员能定制用户的逻辑视图。当你查询一个视图...
阅读全文
摘要:概述: 作为DBA,经常要用开发人员提供的SQL脚本来更新正式数据库,但是一个比较合理的开发流程,当提交脚本给DBA执行的时候,可能已经有几百个sql文件,并且有执行顺序,如我现在工作的公司,十几个客户,每个客户一个库,但是数据库结构、存储过程、视图等都是一模一样,每次执行脚本(以下称为升级),如果...
阅读全文
摘要:一、DBLINK性能问题select * from dbsource.dbname.dbo.table where guid in (select guid from tablechangelogwhere tablename='table ' and id<110000)这个运行居然要40秒以上。...
阅读全文
摘要:1.查询表中的RIDRID=RowID=(fileID:pageID:slotID)SELECT sys.fn_PhysLocFormatter(%%physloc%%) AS rid,* FROM person2.开启DBCC命令语法--开启DBCC TRACEON(2588)--帮助命令DBCC...
阅读全文
摘要:一:现象1:无索引的情况 还是老规矩,看个例子感受下,首先我有一个Product表,里面没有任何索引,如下图:从上图中,我悲剧的看到了,物理读是9次,也就说明走了9次硬盘,你也可以想到,走硬盘的目的是为了拿数据,逻辑读有1636次,要注意的是这里的”次“是“页”的意思,也就是在内存中走了1636个...
阅读全文
摘要:一:表扫描1.现象 ”表扫描“听起来很简单,不就是一行一行的扫嘛,你要说”执行计划”的话,我也会玩,为了更可观,我build一个表,再插入三行数据,如下图:上面的Person我是一个索引都没建,然后where一下,看看表扫描是啥样的???果然是看到了万恶的“表扫描”三个字,既然是万恶的东西,我们一...
阅读全文
摘要:说到sql的参数化处理,我也是醉了,因为sql引擎真的是一个无比强大的系统,我们平时做系统的时候都会加上缓存,我想如果没有缓存,就不会有什么大网站能跑的起来,而且大公司一般会在一个东西上做的比较用心,比较细,sqlserver同样也使用了缓存,其中就包括Data cache 和Plan cache两...
阅读全文
摘要:一:执行计划生成过程 说到执行计划,首先要知道的是执行计划大概生成的过程,这样就可以做到就心中有数了,下面我画下简图:1. 分析过程 这三个比较容易理解,首先我们要保证sql的语法不能错误,select和join的表是必须存在的,以及你是有执行这个sql的权限,对不对。。。这样我们就走完了执行计...
阅读全文
摘要:一: 当select遇到性能低下的update会怎么样?1. 还是使用原始的person表,插入6条数据,由于是4000字节,所以两条数据就是一个数据页,如下图:1 DROP TABLE dbo.Person2 CREATE TABLE Person(ID INT IDENTITY,NAME CHA...
阅读全文
摘要:一:到底都有哪些锁 学习锁之前,必须要知道锁大概有几种???通常情况下作为码农我们只需知道如下几个锁即可。。。1.S(Share)锁 为了方便理解,我们可以直接这么认为,当在select的时候在表,数据页,记录上加上共享锁。2.X(Exclusive) 锁 我们在delete数据的时候会在记录...
阅读全文
摘要:1、NOLOCK(不加锁) 此选项被选中时,SQL Server 在读取或修改数据时不加任何锁。 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll Back)中的数据, 即所谓的“脏数据”。2、HOLDLOCK(保持锁) 此选项被选中时,SQL...
阅读全文
摘要:概念介绍开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其实是表提示(table_hint)中的一种。它等同于 READUNCOMMITTED 。 具体的功能作用如下所示(摘自MSDN): 1: 指定允许脏读。不发布共享锁来阻止其他事务修改当前事务读取的数据,其他事...
阅读全文