-
多列复合索引的使用绕过微软sqlserver的一个缺陷
然而,微软sqlserver在处理这类索引时,有个重要的缺陷,那就是把本该编译成索引seek的操作编成了索引扫描,这可能导致严重性能下降举个例子来说明问题,假设某个表T有索引(cityid,sentdate,userid),现在有个分页列表功能,要获得大于某个多列复合索引V0的若干个记录的查询,用最简单表意的方式写出来就是V>=V0,如果分解开来,就是:cityid>@cityid0or(cityid=@cityid0and(sentdate>@sentdate0or(sentdate=@sentdate0anduserid>=@userid0))),当你写出上述查询时,你会期待sqlserver会自动的把上述识别为V>=V0类型的边界条件,并使用indexseek操作来实施该查询。然而,微软的sqlserver(2005版)有一个重要缺陷(其他的sqlserver如何还不得知),当它遇到这样sql时,sqlserver就会采用indexscan来实施,结果是您建立好的索引根本就没有被使用,如果这个表的数据量很大,那所造成的性能下降是非常大的...
数据库操作教程 2022-09-23 17:13:59 -
sqlserver还原数据库时提示数据库正在使用,无法进行操作的解决方法
这个问题的原因在于有用户连接了当前要做还原的数据库,这里的用户甚至包括当前要做还原的用户。解决办法就是关闭与要还原数据库的所有连接...
数据库操作教程 2022-09-23 17:09:51 -
SQLServer中用T—SQL命令查询一个数据库中有哪些表的sql语句
1、查询SQL中的所有表:SelectTABLE_NAMEFROM数据库名称.INFORMATION_SCHEMA...
数据库操作教程 2022-09-23 17:06:55 -
SQL参数化查询的另一个理由命中执行计划
1概述SQL语言的本质就是一串伪代码,表达的是做什么,而不是怎么做的意思。如其它语言一样,SQL语句需要编译之后才能运行,所以每一条SQL是需要通过编译器解释才能运行的(在这之间还要做SQL的优化)...
数据库操作教程 2022-09-23 17:05:00 -
SQLServer误区30日谈第7天一个实例多个镜像和日志传送延迟
误区#7:一个数据库可以存在多个镜像错误这个误区就有点老生常谈了。每一个主体服务器只允许一个镜像服务器...
数据库操作教程 2022-09-23 17:04:57 -
SQLSERVER收集语句运行的统计信息并进行分析
对于语句的运行,除了执行计划本身,还有一些其他因素要考虑,例如语句的编译时间、执行时间、做了多少次磁盘读等。如果DBA能够把问题语句单独测试运行,可以在运行前打开下面这三个开关,收集语句运行的统计信息...
数据库操作教程 2022-09-23 17:04:47 -
SQLServer误区30日谈第20天破坏日志备份链之后,需要一个完整备份来重新开始日志链
误区#20:在破坏日志备份链之后,需要一个完整备份来重新开始日志链错误事务日志备份会备份自上次事务日志备份以来所有的事务日志(如果从来没有过日志备份的话,那就从上一次完整备份开始)。有好几种类型的操作会中断事务日志的连续性,也就是说除非重新开始新的日志链,SQLServer无法再进行日志备份...
数据库操作教程 2022-09-23 17:03:48 -
SQLServer误区30日谈第8天有关对索引进行在线操作的误区
误区#8:在线索引操作不会使得相关的索引加锁错误! 在线索引操作并不是想象的那么美好。 在线索引操作会在操作开始时和操作结束时对资源上短暂的锁...
数据库操作教程 2022-09-23 17:00:44 -
SQLServer使用Merge语句当源表数据集为空时,无法进行查询的问题
面举一个例子来具体说明一下:有两个表SourceTable为登陆表,TargetTable为授权表,如果访问用户在登陆表中,更新授权表的授权级别,否则授权0表示游客。sql语句如下:--SourceTable为登陆表,TargetTable为授权表--如果访问用户在登陆表中,更新授权表的授权级别,否则授权0表示游客...
数据库操作教程 2022-09-23 16:57:56 -
同一个sql语句连接两个数据库服务器
execsp_addlinkedserver'逻辑名称','','SQLOLEDB','远程服务器名或ip地址'execsp_addlinkedsrvlogin'逻辑名称','false',null,'用户名','密码'go建立完成之后就可以正常使用了select*from逻辑名称。数据库名称...
数据库操作教程 2022-09-23 16:57:50 -
SQLServer触发器数据库进行数据备份
复制代码代码如下: createtabletest3(idintprimarykeynotnull identity(1,1),unamevarchar(20),uageint); createtabletest3_bak(idintprimarykeynot nullidentity(1,1),bidint,unamevarchar(20), uageint,activechar(1)); 第二步,编写备份用的触发器...
数据库操作教程 2022-09-23 16:57:43