随笔分类 - 数据库SQL Server
摘要:SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[usp_CommonDataResourcePaged] ( @TableName varchar(500), ----要显示的表或多个表的连接 @FieldList varcha...
阅读全文
摘要:SqlServer需要在执行操作前对目标资源获取所有权,那么久发生锁定,是一个逻辑概念。为了保证事务的ACID特性设计的一种机制。 在多用户并发操作数据时,为了出现不一致的数据,锁定是必须的机制。使用锁可保证数据一致性,但这也致使你在编码、设计时要把锁定考虑进去。如果锁的数量太多,持续时间过长,对并
阅读全文
摘要:为了提高性能,可以使用提示(hints)特性,包含以下三类: 查询提示:(query hints)告知优化器在整个查询过程中都应用某个提示 关联提示:(join hints)告知优化器在查询的特定部分使用指定的关联算法 表提示:(table hints)告知优化器使用表扫描还是表上特定的索引 这是非
阅读全文
摘要:锁的作用范围通常在事务中,事务是建立在并发模式下。 从SQL Server 2005开始,加入了一种新的并发模式 乐观并发。不管使用哪种并发模式,如果多个会话同时修改相同的数据,都会产生资源争用,然后引发一系列的问题。 1.存在的读现象:包括脏读、不可重复读和幻读。 2.丢失更新:一个会话的修改效果
阅读全文
摘要:如何知道索引有问题,最直接的方法就是查看执行计划。通过执行计划,可以回答表上的索引是否被使用的问题。 (1)包含索引:避免书签查找 常见的索引方面的性能问题就是书签查找,书签查找分为RID查找和键值查找。 当非聚集索引被用于查找数据,但又不能覆盖查询时,就会引起书签查找。此时优化器会借助堆上的RID
阅读全文
摘要:DML操作符包括增删改查等操作方式。 如此简单的INSERT语句,执行计划比前面的SELECT语句还要复杂,表中有自增列、外键约束和空间数据列。 出现新的操作符:常量扫描(Constant Scan),这个操作符会引入一个常量到查询中,由它创建了一列空行以便后面两个操作符有位置可以添加他们的输出。
阅读全文
摘要:常见的操作符:Sort、Hash Match(聚合)、Filter、Compute Scalar等 一:Sort 在进行聚集索引扫描操作后,数据集进行了Sort操作。当优化器认为在执行过程中需要对数据尽心排序时,就会产生这个操作。 整个查询对1069行数据进行了排序操作。排序操作本身不是问题,问题是
阅读全文
摘要:表关联:Hash、Nested Loops、Merge。这是实际算法,不是T-SQL中的inner/left/right/full/cross join。优化器会把这些T-SQL写法转换成上面的3种算法。 通过这3种算法,可以推出其他操作符的行为。 1.Hash Match Join Hashing
阅读全文
摘要:SQL Server 针对用户提交的DML语句,通过一系列的优化后,产生出一个能被SQL Server识别并高效“响应”的方案,用Ctrl+M(实际执行计划)在用Ctrl+L(预估执行计划) 提交一个DML语句(CRUD)会引起一系列的活动。 1.发生在关系引擎中的活动 2.发生在存储引擎中的活动
阅读全文
摘要:等待大概分为3类:资源等待、队列等待、外部等待 过滤掉系统相关的等待类型的语句。(查看常用的等待信息) 生产环境中使用: 当A正在更新一个表并把表锁住时,B也想去读这个表,此时B就必须等待A完成。对于这种情况,可以使用DMV:sys.dm_os_waiting_tasks查看当前正在处于等待状态的会
阅读全文
摘要:通过上一节收集的数据组合在一起,并经过分析阶段,制定出对索引的创建、删除、修改方案,然后在实施阶段进行部署 主要关注下面几个部分: 1.审查服务器状态 2.未使用索引 3.索引计划使用 一:审查服务器状态 1.性能计数器 2.等待信息 3.Buffer分配 创建一个堆表,插入数据,并更新其中一些数据
阅读全文
摘要:一、ROW_NUMBER row_number的用途的非常广泛,排序最好用他,一般可以用来实现web程序的分页,他会为查询出来的每一行记录生成一个序号,依次排序且不会重复,注意使用row_number函数时必须要用over子句选择对某一列进行排序才能生成序号。row_number用法实例: 图中的r
阅读全文
摘要:1.索引方法论 索引方法论包含3个步骤:监控分析和实施。这三步是循环运行的,先监控后分析最后实施,然后在监控在分析在实施,知道没有明显的和潜在的索引问题为止。 2.监控 常见的监控工具有下面的3种: 1.性能监视器 2.动态管理对象 3.SQL Trace 对于性能计数器,可以很频繁的查询,但是如果
阅读全文
摘要:对于索引存储,2008开始有两种优化方式,都是通过去除重复的数据减少存放的空间,使得原有的存放空间减少。更少的空间意味着更少的页,更少的页意味着查询过程中更少的I/O请求。分别为行压缩和页压缩 1.行压缩 第一种:降低行的体积。行压缩通过改变行的存储形式来达到目的,可以用在堆或者B_Tree上,启用
阅读全文
摘要:在很多时候一个表上有一个聚集索引和几个非聚集索引就可以让性能表现的更优秀 一:堆 1.临时对象 最常见的堆应用就是临时对象,由于对象具有临时性特点,因此没必要对其进行聚集索引化,表变量只能在定义时创建聚集索引,定义后就不能单独创建了 --做少许改动,除了表名和聚集索引外,其他语句和上面一样 使用堆表
阅读全文
摘要:索引维护的两个重要方面是索引碎片和统计信息。 一:索引碎片 降低碎片的产生,当索引上的页不在具有物理连续性时,就会产生碎片,下面的情景会产生碎片: INSERT操作、UPDATE操作、DBCC SHRINKDATABASE操作 除了查询数据之外,对索引的绝大部分操作都会引起碎片,当然如果数据库是只读
阅读全文
摘要:常见的误区: 1.数据库不需要索引 2.主键总是聚集的 3.联机索引操作不引起阻塞 4.复合索引下列的顺序不重要 5.聚集索引以物理顺序存储 6.填充因子可以应用在索引的插入过程中 7.每个表应该有聚集索引 一:数据库不需要索引 在CarrierTrackingNumber创建一个索引,以提高查询性
阅读全文
摘要:SQLServer 有3种物理连接:Nested Loop(嵌套循环)、Merge Join(合并联接)、Hash Join(哈希联接)。 T-SQL中的inner/left/right/full join等在进行优化的过程中会转换成上面3种物理连接。 处于上方的输入叫做外部输入,处于下方的输入叫做
阅读全文
摘要:1.缺失索引: 得到下面的信息: --创建一个索引 索引后结果如下: 2.统计信息过时 你明知道返回和处理的结果集都很小,而优化器却选择了hash连接,这是就可以检查一下图形化执行计划中是否有黄色叹号,或者用文本化执行计划看看预估和实际行数的差异是否很大。如果是使用UPDATE STATISTICS
阅读全文
摘要:索引上的碎片影响主要有: 1.带来额外的IO 2.影响连续读 (1).索引 I/o
阅读全文