![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库
苍狼_2001
程序员之所以犯错误,不是因为他们不懂,而是因为他们自以为什么都懂。
展开
-
sql server 查看索引碎片大小,并定期重建索引
查看碎片情况使用 dbcc showcontig 函数来进行代码:--改成当前库use DB_Name--创建变量 指定要查看的表declare @table_id intset @table_id=object_id('TableName')--执行dbcc showcontig(@table_id)DBCC SHOWCONTIG是显示指定的表的数据和索引的碎片信息。解释如下:Page Scanned-扫描页数:如果你知道行的近似尺寸和表或索引里的行数,那么你可以估计出索.原创 2020-06-15 15:18:06 · 475 阅读 · 0 评论 -
SQL Server 重建索引|索引重组|索引的碎片检查
什么是索引碎片呢?由于表上有过度地插入、修改和删除操作,索引页被分成多块就形成了索引碎片,如果索引碎片严重,那扫描索引的时间就会变长,甚至导致索引不可用,因此数据检索操作就慢下来了。检查索引碎片SELECT OBJECT_NAME(dt.object_id) , si.name , dt.avg_fragmentation_in_percent, dt...转载 2020-06-15 15:16:22 · 589 阅读 · 0 评论 -
[笔记整理]SQL Server 索引碎片 和 重建索引
铺垫知识点:数据库存储本身是无序的,建立了聚集索引,会按照聚集索引物理顺序存入硬盘。既键值的逻辑顺序决定了表中相应行的物理顺序多数情况下,数据库读取频率远高于写入频率,索引的存在 为了读取速度牺牲写入速度页 为最小单位 8kb区物理连续的页(8页)的集合内部碎片 数据库页内部产生的碎片,外部反之碎片的产生:有一个表里有8条数据,已经将一页填满,这个时候要插入第九条数据,页也就分裂了。这就产生了内部碎片。如下图所示(excel示意一下 懒癌晚期)注: 不会将9单独...转载 2020-06-15 15:14:38 · 488 阅读 · 0 评论 -
浅谈 exists 和 in 的执行原理及使用场景
exists的执行原理:对外表做loop循环,每次loop循环再对内表(子查询)进行查询,那么因为对内表的查询使用的索引(内表效率高,故可用大表),而外表有多大都需要遍历,不可避免(尽量用小表),故内表大的使用exists,可加快效率;in的执行原理是把外表和内表做hash连接,先查询内表,再把内表结果与外表匹配,对外表使用索引(外表效率高,可用大表),而内表多大都需要查询,不可避免...转载 2019-11-19 16:22:46 · 175 阅读 · 0 评论 -
SQL Server 2005中的分区表(六):将已分区表转换成普通表
我的俄罗斯名叫作“不折腾不舒服斯基”,所以,不将分区表好好折腾一下,我就是不舒服。 在前面,我们介绍过怎么样直接创建一个分区表,也介绍过怎么将一个普通表转换成一个分区表。那么,这两种方式创建的表有什么区别呢?现在,我又最新地创建了两个表: 第一个表名为Sale,这个表使用的是《SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?》中的方法创建...转载 2018-04-18 11:17:44 · 122 阅读 · 0 评论 -
SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接
SQL连接可以分为内连接、外连接、交叉连接。 数据库数据: book表 stu表 1.内连接1.1.等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。1.2.不等值连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列...转载 2018-04-17 10:02:53 · 197 阅读 · 0 评论 -
SQL 操作结果集 -并集、差集、交集、结果集排序
操作结果集 为了配合测试,特地建了两个表,并且添加了一些测试数据,其中重复记录为东吴的人物。 表:Person_1魏国人物 表:Person_2蜀国人物 A、Union形成并集 Union可以对两个或多个结果集进行连接,形成“并集”。子结果集所有的记录组合在一起形成新的结果集。 1、限定条件 要是用Union来连接结果集,有4个限定条件。 (1)、子...转载 2018-04-17 16:16:42 · 234 阅读 · 0 评论 -
T-SQL字符串相加之后被截断的那点事
字符串自身相加, 虽然赋值给了varchar(max)类型的变了,在某些特殊情况下仍然会被“截断”,这到底是varchar(max)长度的问题还是操作的问题? 1,两个不超过8000长度的字符串自身相加,其结果长度超过8000之后会被截断: 不多说,直接上例子:定义一个字符串,赋值给 varchar(max)类型的变了,字符创长度为4040没有,任何问题。 把4040长度的字符串复制一份出来...原创 2018-05-22 14:49:58 · 336 阅读 · 0 评论 -
SQL左右连接中的on and和on where的区别
on and 是指这前后两个表连接的条件 不止一个条件,两个表会按所有条件进行前后连接,这on和and左右出现的是列与列的关系。他是A和B全部数据按要求的连接。on where 是指这前后两个表的连接条件只有on后面的一个,然后对连接好的结果,去执行where条件查询,where后面的列可以不是连接相关的列,where后面出现的是某一个列的条件,是对行的筛选条件,不是列与列的连接关系。where...转载 2018-06-23 17:19:43 · 378 阅读 · 0 评论 -
索引的升降序
1.在创建索引的时候,如果索引中的数据列只有一个,那么不管是升序还是降序的定义,在查询中使用成本都是一样的。2.如果索引中的数据列有多个,那么每一个列的升序和降序就非常的重要,如果在查询中的列的排序和索引中定义的不一样,成本就很大,反正,就很小。联合索引是由多个字段组成的索引。唯一索引是使用索引可快速访问数据库表中的特定信息。查询时使用联合索引的一个字段,如果这个字段在联合索引中所...原创 2018-08-20 10:43:40 · 4444 阅读 · 0 评论 -
SQL语句执行效率及分析
1.关于SQL查询效率,100w数据,查询只要1秒,与您分享:机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试,比较两种查询的性能SQL查询效率 step by step-- setp 1.-- 建表create table t_userinfo(userid int identit...转载 2018-08-21 17:33:52 · 492 阅读 · 0 评论 -
Merge的用法
Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入、更新或删除操作。MERGE 目标表USING 源表ON 匹配条件WHEN MATCHED THEN语句WHEN NOT MATCHED...原创 2019-07-05 09:57:58 · 2444 阅读 · 0 评论 -
SQL Server中@@ROWCOUNT的用法
SQL Server中@@ROWCOUNT返回受上一语句影响的行数,返回值类型为 int 整型。如果行数大于 20 亿,则需要使用 ROWCOUNT_BIG。@@ROWCOUNT和@@ERROR变量的值,在执行完一条语句后总是会发生变化,所以我们将他们作为判断的依据的时候应该首先保存在局部变量中。他们反映的都是紧接着的上一条语句对他们的影响!我们通常可以通过update、insert语句...原创 2019-07-25 17:36:09 · 1367 阅读 · 0 评论 -
SQL Server 2005中的分区表(五):添加一个分区
所谓天下大事,分久必合,合久必分,对于分区表而言也一样。前面我们介绍过如何删除(合并)分区表中的一个分区,下面我们介绍一下如何为分区表添加一个分区。 为分区表添加一个分区,这种情况是时常会 发生的。比如,最初在数据库设计时,只预计了存放3年的数据,可是到了第4天怎么办?这样的话,我们就可以为分区表添加一个分区,让它把新的数据放在新的分区里。再比如,最初设计时,一个分区用于存放一年的数据,...转载 2018-04-18 11:17:54 · 147 阅读 · 0 评论 -
SQL Server 2005中的分区表(四):删除(合并)一个分区
在前面我们介绍过如何创建和使用一个分区表,并举了一个例子,将不 同年份的数据放在不同的物理分区表里。具体的分区方式为: 第1个小表:2010-1-1以前的数据(不包含2010-1-1)。 第2个小表:2010-1-1(包含2010-1-1)到2010-12-31之间的数据。 第3个小表:2011-1-1(包含2011-1-1)到2011-12-31之间的数据。 第4个小表:...转载 2018-04-18 11:18:03 · 600 阅读 · 0 评论 -
完美解决distinct中使用多个字段的方法
众所周知,distinct可以列出不重复的记录,对于单个字段来说distinct使用比较简单,但是对于多个字段来说,distinct使用起来会使人发狂。而且貌似也没有见到微软对distinct使用多字段的任何说明。下面就提供了一种方法可以在使用distinct的时候同时使用多个字段。select 要使用字段1,要使用字段2 from 表名 where id in (select min(id)原创 2011-11-19 08:11:12 · 16578 阅读 · 0 评论 -
如何防范sql注入式攻击
上篇文章谈到了sql注入式攻击,今天说一下如何防范sql注入式攻击! 其实要防止asp.net应用被sql注入式攻击闯入并不是一件特别困难的事,只要在利用表单输入的内容构造sql命令之前,把所有内容过滤一番就可以了。过滤输入内容可以按照多种方式进行。一、对于动态构造sql查询的场合,可以用下面的技术1、删除用户输入内容中的所有连接字符串,防止攻击者构造出“select * from原创 2011-07-02 14:40:48 · 718 阅读 · 0 评论 -
sql注入式攻击
所谓sql注入式攻击,就是攻击者把sql命令插入到web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的sql命令。在某些表单中,用户输入的内容直接用来构造或者影响动态sql命令,或者作为存储过程的输入参数,这类表单特别容易受到sql注入式攻击。 常见的sql注入式攻击过程如下。 (1)某个asp.net web页面有一个登录页面,这个登录页面控制着用户是原创 2011-06-30 20:29:00 · 1059 阅读 · 0 评论 -
SQL中IN和EXISTS用法的区别
SET NOCOUNT ON, SET NOCOUNT OFF当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。 如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。 SQL中IN和EXISTS用法的区别NO原创 2011-06-30 15:07:00 · 369 阅读 · 0 评论 -
sql命令的优化
与数据库交互的基本语言是sql,数据库每次解析和执行sql语句多需要执行很多步骤。以sql server为例,当数据库收到一条查询语句时,语法分析器会扫描sql语句并将其分成逻辑单元(如关键词、表达式、运算符和标识符)并生成查询树,最后查询优化器将分析所有可以访问数据库的源表的方法,从中选择一组返回结果集最快且消耗资源较少的步骤。查询树随即进行更新以准确记录这个步骤,接着交由数据库引擎原创 2011-06-29 20:57:00 · 412 阅读 · 0 评论 -
也论该不该在项目中使用存储过程代替SQL语句
昨天有个学生问我他的毕业设计中有个插入功能一直报错,怎么都不找不出原因,查看页面源代码后我被震惊了。她的页面中到处是sql语句,一些复杂的sql语句左拼右拼,拼得眼花缭乱,实在是惨不忍睹。我问为什么不用存储过程呢,她说学校就教了这个,没教怎么用存储过程。唉,当今大学的教育水平真是令人担忧啊。下面发表一下个人看法,如有不当之处,大家别笑掉大牙啦。 存储过程的好处,我就不多说了,想必各位都已了然于胸。 当然,存储过程也有不少坏处:1,当存储过程数量越来越多的时候,在众多存储过程中找原创 2011-04-14 15:12:00 · 809 阅读 · 1 评论 -
SQL Server 2005的几个新功能
SQL Server 2005的几个新功能原创 2011-04-12 21:48:00 · 327 阅读 · 0 评论 -
SQLServer : EXEC和sp_executesql的区别
1,EXEC的使用2,sp_executesql的使用 MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有。还有一个最大的好处就是利用sp_executesql,能够重用执行计划,这就大大提供了执行性能(对于这个我在后面的例子中会详加说明),还原创 2017-10-11 16:10:05 · 548 阅读 · 0 评论 -
几种数据库的大数据批量插入
IProvider里有一个用于实现批量插入的插件服务接口IBatcherProvider。 /// /// 提供数据批量处理的方法。 /// public interface IBatcherProvider : IProviderService { /// /// 将 的数据批量插入到数据库中。转载 2017-10-16 10:38:42 · 994 阅读 · 0 评论 -
大数据之sql server使用分区表
sql server数据库每天增量上了万级别、十万级别,如果又有查询统计的需要,一般都会考虑用分区表,好处是每个分区的数据可以放在单独的文件里面,这样当要被查询统计的数据只在一个分区的时候,不用全部文件进行扫描,只对分区所在的文件进行扫描,大大的减少了IO,提高了查询的效率。同时当一个分区的数据坏了不会影响其它分区的数据,数据库备份也可以对单独的分区进行备份。在实际的业务中,常见的就是对日志表或者...转载 2018-03-06 14:20:13 · 4028 阅读 · 1 评论 -
用UPDATE SET FROM 语句来关联表更新数据
写sql语句最常用的就是update xx set where这样的更新一个表的数据,其实在一些复杂的需求是我们可能要涉及到两个表关联来更新数据。我们可以用UPDATE SET FROM 语句来关联表更新数据。例如:有这样一个需求:两个表a和b,想使b中的memo字段值等于a表中对应id的name值。表a:idname 1Kobe2Jordon3Yao表b:idmemo1 2 3 T-SQL语句...转载 2018-03-06 14:24:47 · 32204 阅读 · 0 评论 -
QL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?
如果你的数据库中某一个表中的数据满足以下几个条件,那么你就要考虑创建分区表了。 1、数据库中某个表中的数据很多。很多是什么概念?一万条?两万条?还是十万条、一百万条?这个,我觉得是仁者见仁、智者见智的问题。当然数据表中的数据多到查询时明显感觉到数据很慢了,那么,你就可以考虑使用分区表了。如果非要我说一个数值的话,我认为是100万条。 2、但是,数据多了并不是创建分区表的惟一条件,哪怕...转载 2018-04-18 11:17:04 · 217 阅读 · 0 评论 -
SQL Server 2005中的分区表(二):如何添加、查询、修改分区表中的数据
在创建完分区表后,可以向分区表中直接插入数据,而不用去管它这些数据放在哪个物理上的数据表中。接上篇文章,我们在创建好的分区表中插入几条数据: 从以上代码中可以看出,我们一共在数据表中插入了13条数据,其中第1至3条数据是插入到第1个物理分区表中的;第4、5条数据是插入到第2个物理分区表中的;第6至8条数据是插入到第3个物理分区表中的;第9至11条数据是插入到第4个物理分区表中的;第12、1...转载 2018-04-18 11:18:18 · 1386 阅读 · 0 评论 -
SQL Server 2005中的分区表(三):将普通表转换成分区表
在设计数据库时,经常没有考虑到表分区的问题,往往在数据表承重的负担越来越重时,才会考虑到分区方式,这时,就涉及到如何将普通表转换成分区表的问题了。 那么,如何将一个普通表转换成一个分区表 呢?说到底,只要将该表创建一个聚集索引,并在聚集索引上使用分区方案即可。 不过,这回说起来简单,做起来就复杂了一点。还是接着上面的例子,我们先使用以下SQL语句将原有的Sale表删除。[c-sharp...转载 2018-04-18 11:18:11 · 136 阅读 · 0 评论