随笔分类 - SQLSERVER索引
摘要:阿里云专家也翻车?实测揭露删除事务锁范围扩大的真相 背景本文通过对SQL Server和MySQL两种数据库的删除操作加锁行为进行测试,探讨了Ghost Record对锁机制的影响。 通过模拟SQL Server和MySQL中的事务操作,文章对阿里云月报中关于删除事务减少锁范围的说法提出质疑。实践测
阅读全文
摘要:为什麽我们一般会在自增列或交易时间列上建立聚集索引?到新公司上班也有一段时间了,感觉现在的自己才开始慢慢学习SQL~看这篇文章之前,大家可以先看一下我之前写的一篇文章聚集索引表插入数据和删除数据的方式是怎样的一般的交易系统里面我们都会以自增列或交易时间列作为聚集索引列,因为一般这些系统都是写多读少每天的交易数据会不停的插入到数据库,但是读取数据就没有数据插入那么频繁因为这些系统一般是写多读少,所以我们会选择在自增列或交易时间列上建立聚集索引测试测试环境:SQLSERVER2012 SP1 WINDOWS7 64位我们来做一个测试,测试脚本如下: 1 --测试脚本 插入性能 2 USE [te.
阅读全文
摘要:Select * 一定不走索引是否正确?走索引指的是:SQL语句的执行计划用到了1、聚集索引查找 2、索引查找 ,并且查询语句中需要有where子句根据where子句的过滤条件,去聚集索引或非聚集索引那里查找记录一张表只有一列的情况:聚集索引 1 USE [tempdb] 2 GO 3 CREATE TABLE t1 ( id INT ) 4 GO 5 CREATE CLUSTERED INDEX CIX_T1 ON [dbo].[t1](ID ASC) 6 GO 7 8 9 DECLARE @I INT10 SET @I = 111 WHILE @I < 1000 12 BEGI...
阅读全文
摘要:SQLSERVER2012 列存储索引的简单研究和测试 转自:微软技术大会2016 逐行插入:插入数据-》行组 超过100K 102400行才会插入到压缩行组-》压缩行组-》移动元组-》列段 大批量插入:插入数据 超过100K 102400行-》压缩行组-》移动元组-》列段数据插入到行组时,一旦并发
阅读全文
摘要:SQL Server全文搜索 看这篇文章之前请先看一下下面我摘抄的全文搜索的MSDN资料,基本上MSDN上关于全文搜索的资料的我都copy下来了 并且非常认真地阅读和试验了一次,并且补充了一些SQL语句,这篇文章本人抽取了一些本人自认为是重点的出来 并且加入了一些自己的内容,补充MSDN上没有的和整
阅读全文
摘要:聚集索引表插入数据和删除数据的方式是怎样的 根据《SQLSERVER聚集索引与非聚集索引的再次研究(上)》里说的,聚集索引维护着创建第一个聚集索引时的第一个字段的顺序来排序 当插入记录的时候,或者重新组织索引的时候都会按照字段顺序来排序 今天来做一个实验来验证一下 华丽的分割线 先创建一个聚集索引表
阅读全文
摘要:SQLSERVER聚集索引与非聚集索引的再次研究(上) 上篇主要说聚集索引 下篇的地址:SQLSERVER聚集索引与非聚集索引的再次研究(下) 由于本人还是SQLSERVER菜鸟一枚,加上一些实验的逻辑严谨性, 单写《SQLSERVER聚集索引与非聚集索引的再次研究(上)》就用了12个小时,两篇文章
阅读全文
摘要:SQLSERVER聚集索引与非聚集索引的再次研究(下) 上篇主要说了聚集索引和简单介绍了一下非聚集索引,相信大家一定对聚集索引和非聚集索引开始有一点了解了。 这篇文章只是作为参考,里面的观点不一定正确 上篇的地址:SQLSERVER聚集索引与非聚集索引的再次研究(上) 下篇主要说非聚集索引 先上非聚
阅读全文
摘要:SQLSERVER如何查看索引缺失当大家发现数据库查询性能很慢的时候,大家都会想到加索引来优化数据库查询性能,但是面对一个复杂的SQL语句,找到一个优化的索引组合对人脑来讲,真的不是一件很简单的事。好在SQLSERVER提供了两种“自动”功能,给你建议,该怎么调整索引第一种是使用DMV第二种是使用DTA (database engine tuning advisor) 数据库引擎优化顾问这篇文章主要讲第一种从SQL2005以后,在SQLSERVER对任何一句语句做编译的时候,都会去评估一下,这句话是不是缺少什么索引的支持,如果他认为是,他还会预估,如果有这麽一个索引他的性能能提高多少SQLSE
阅读全文
摘要:SQLSERVER聚集索引和主键的误区很多人会把Primary Key和聚集索引搞混起来,或者认为这是同一个东西。这个概念是非常错误的。主键是一个约束(constraint),他依附在一个索引上,这个索引可以是聚集索引,也可以是非聚集索引。所以在一个(或一组)字段上有主键,只能说明他上面有个索引,但不一定就是聚集索引。例如下面: 1 USE [pratice] 2 GO 3 CREATE TABLE #tempPKCL 4 ( 5 ID INT PRIMARY KEY CLUSTERED --聚集索引 6 ) 7 8 9 ------------------------------...
阅读全文
摘要:SQLSERVER对索引的利用写SQL语句的时候很多时候会用到filter筛选掉一些记录,SQL对筛选条件简称:SARG(search argument/SARG)1 where amount>4000 and amount、NOT EXISTS、NOT IN、NOT LIKE规律就是有“NOT” 关键字 或者 不等于的意思 基本上利用不了索引还有一些内部函数,如果使用这些内部函数SQLSERVER也不会用到索引内部函数,例如:CONVERT(),UPPER()等
阅读全文
摘要:SQLSERVER的非聚集索引结构我们知道SQLSERVER的数据行的存储有两种数据结构:A: 堆 B :B树(binary 二叉树)数据按照这种两种的其中一种来排序和存储,学过数据结构的朋友应该知道二叉树,为什麽用二叉树,因为方便用二分查找法来快速找到数据。如果是堆,那么数据是不按照任何顺序排序的,也没有任何结构,数据页面也不是首尾相连的,不像B树,数据页面使用双向链表首尾相连。堆表只依靠表里的IAM页(索引分配映射页)将堆的页面联系在一起,IAM里记录了页面编号,页面位置除非表里有聚集索引,如果没有的话那么表里的数据的存储就是堆结构那么非聚集索引呢?非聚集索引也是堆结构?其实SQLSERV
阅读全文