SQLServer DBA 三十问之我答第1~10题

    首先声明:这是本人的答案,并非官方答案,不要盲目追捧,因为觉得这问题很具有代表性,很多人想了解,所以记下,顺便让广大园友也来给本人打打分。因为本人平时用sqlserver2000,所以大多基于sql2000回答。
问题如下: 
1. char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;
答:
char 是定长的字符类型,若长度不够自动在后面补足够的空格 ;
varchar是可变长度的字符类型,具长度体根据存入的数据而定;
nvarchar可理解为unicode的可变长度字符类型;
xml类型的字段没用过,因为感觉xml用不上索引; 
2. 系统DB有哪些,都有什么作用,需不需要做备份,为什么;损坏了如何做还原(主要是master库);
答:
master 主要保存系统级的信息,比如本数据库实例都有哪些数据库 ,都有哪些账号等,需备份;
model 模板,每创建一个数据库 ,都会根据这个库的结构来创建,如果改过此库,建议备份;
msdb 保存计划任务,作业之类的信息,需备份,否则会丢失作业和备份计划;
tempdb 用户对sqlserver操作时产生的临时数据依赖于此库,最常见的是临时表,不许备份;
resource 这个是sqlserver2005新增的只读数据库,保存了sqlserver的系统对象,如sys.objects,建议备份,磁盘损坏时需要; 
master的还原要依赖于sqlcmd,估计很少人经常干这事,所以这时候应该查下资料; 
3. 有哪些操作会使用到TempDB;如果TempDB异常变大,可能的原因是什么,该如何处理;
 答:
每个sqlserver运行时所产生的临时数据都会用到tempdb,最常见的是执行sql脚本需要返回的记录集;
异常变大的原因是执行的操作返回的记录集过大造成,找出该语句优化,减少数据范围,或者分批操作这些数据; 
4. Index有哪些类型,它们的区别和实现原理是什么,索引有啥优点和缺点;如何为SQL语句创建合适的索引,索引创建时有哪些需要注意的项,如何查看你创建的索引是否被使用;如何维护索引;索引损坏如何检查,怎么修复;T-SQL有更好的索引存在,但是运行时并没有使用该索引,原因可能是什么;
答:
聚集索引,非聚集索引;聚集索引只能有一个,非聚集可有多个,数据依赖于聚集索引来保存,如果没有聚集索引,数据是一个乱序的堆;
优点:合适的索引可有效提高查询效率;缺点:过多的索引,在insert、update 和 delete 的时候增加索引的维护成本,降低并发量;
一般索引的创建要依赖于 where 和 order by 这两个关键字,执行计划可以看出是否用到了索引;
还没遇到过索引损坏的情况,如果损坏,重建之;
用不到索引可能是索引碎片过多 ,可进行碎片整理,若不行可加强制索引with(index( 索引名 ))  
5. 视图上我们能建索引吗,如果能建的话,会啥好处和坏处;视图上建索引和表上建索引有啥区别;
答:
有索引视图,不过本人从来不用, 因为视图被定义为一个虚拟表,如果对其创建索引,需要具备一些苛刻的条件,也不易维护,所以从来不用;
6. Job信息我们可以通过哪些表获取;系统正在运行的语句可以通过哪些视图获取;如何获取某个T-SQL语句的IO、Time等信息;
答:
sql2000下是通过 master.dbo.sysjobs 来查看作业信息;系统正在运行的语句可通过 master.dbo.sysprocesses 结合 dbcc inputbuffer 来查看,一般查堵塞这个很管用(关于堵塞的定位可看我的另外一篇博客,sqlserver阻塞定位  ); 
IO,在sql2000下我本人都是通过profiler看reads,duration,sql2005下有了动态视图(dmv);  
7. 在线系统,一个表有五千万记录,现在要你将其中的两千万条记录导入到另一台服务器的某个表中,导完后,需要将这两千万数据删 除,你预备如何处,优缺点是什么;
答:
这个的我之前专门写了一篇博客, 在这里  SQLServer DBA 三十问之我答(第7题)
8. 数据库服务器报磁盘空间不足,你将如何应对,要求尽快恢复;
答:
如果是日志文件太大,备份日志,sqlserver会自动截断日志;
如果是数据文件过大,赶紧转移到一个足够大的硬盘上,然后再想办法拆分库,一般一个库100G应该差不多,如果太大备份还原什么的都不是很方便,至于拆分方案那不可一概而论; 
9. 临时表、表变量、CTE(公用表表达式)有啥区别和联系,保存位置有啥不一样,使用时如何决定选哪种;
答:
临时表,保存在 tempdb中,
表变量 保存在内存中,他和临时表的区别是 一个是保存在tempdb,一个保存在内存中,
cte是sqlserver2005新增的,是把一个记录集当做一个变量来使用,他跟表变量的区别是不需要insert数据,所以应该比表变量更高效;
如果只使用一次cte应该是最好的,如果要重复多次使用同一个记录集,我个人认为还是表变量,
如果你还需要用到truncate语句来清除临时的数据,那最好用临时表,因为表变量不支持truncate,可参考我的另一篇 本质:sqlserver为什么表变量不能truncate
10. SQLServer有哪些隔离级别,默认级别是哪个;数据库有哪些主要的锁类型;行版本控制是如何实现的;
答:
隔离级别:read uncommitted,相当于给每个select 加with(nolock),会产生脏读,为提高并发量可设置此选项;
read committed 不允许脏度,默认级别;repeatable read 锁定select的数据集;serializable 相当于在select的表上加 with(holdlock),从来没用过;
books online 里查 set transaction isolation level 可查到。 
后语:刚开始看这题目的时候,感觉都经常用到,应该很easy,但是真正要回答的时候发现不知道该怎么表示,最后还是花了不少时间来查一些资料,也算是对自己知识的再巩固。可能有些回答的不一定准确,如果哪位仁兄另有高见,不妨赐教一二,也可经常切磋切磋,共同进步。从本人招聘的经历来看,做asp.net开发的能答对第1、第4题已经算是很不错的了,从这点可以看到sql是广大的程序员的弱项。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sqlalche...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中,相信很多人在sqlmap之osshell怎么使用问题上存在疑惑,小编查阅了各式资料,整理出
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册表读取等system。是mssql的最高权限db权限:文件管理,数据库操作等 users-administratorspublic权限:数据库操作 guest-users2、sql server注入执行命令查
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看实际数据库中发生了什么事情,有必要定期进行查询优化和索引否则会影响我们后期的SQL的查询速度。那么针对这样的问题我们必须要知道SQL执行的计划,在本文中winwin7小编给大家分享下SQL执
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点应用非常广泛。不过在使用中,我们会遇到非常多的错误,面对这么庞大的数据库环境,当然会有精确的错误代码的对照季,下面小编分享的
SQL Server本地账户无法登陆出现错误提示:error:40-Could not open a connenction to SQL Server的问题很常见,对于初学者来说可能不知道如何解决,一起来看看下面的解决方案。解决步骤如下:1、这种情况需要开启 SQL Server service
微软推出的SQL2008是一款非常好用的数据库软件,它稳定、功能强大,为众多企业提供了最佳的数据库解决方案,那么我们如何在Windows中安装它呢,一些朋友对SQL Server 2008的安装过程还不是很熟悉,下面就一起来看看SQL Server 2008详细安装图解...
本页概要如果您使用的是 SQL Server 2005备份和还原Sp_detach_db 和 Sp_attach_db 存储过程关于排序规则的说明导入和导出数据(在 SQL Server 数据库之间复
DBCC CHECKIDENT 检查指定表的当前标识值,如有必要,还对标识值进行更正。 语法 DBCC CHECKIDENT ( 'table_name' [ , { NORESEED
这里对 SQL Server 字符串函数进行分门别类地列出,便于查阅和记忆,相信大家都在其它方面有高深的编程基础,从字面上来说大家都知道这些函数的意义,就不对这些函数作过多的解释了,主要谈些经验,具体
查询及删除重复记录的方法 1、查找表(people)中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select*frompeoplewherepeopleIdin(selectpe
微软发SQL Server 2008第二个CTP预览版from: http://news.csdn.net/n/20070807/107158.html8月7日消息,微软公司本周发布了SQL Serv
症状当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题。SQL Server 联机丛书中的孤立用户疑难解答主题中没有讲述解决此问题的具体步骤。本文介绍了如何解决孤立用户问题。更多信息虽然术
当登录SQL Server 2005时可能碰到错误: 'No Process is on the Other End of the Pipe'。解决方法:(1)Open up SQL
概要本文描述如何映射标准登录和集成登录来解决在运行 SQL Server 的服务器之间移动数据库时的权限问题。更多信息当您将数据库从一个运行 SQL Server 的服务器移到另一个运行 SQL Se
----------------------------------------问题:该用户与可信的SQL SERVER 连接无关联使用sa用户或自建用户使用“SQL SERVER 身份认证”连接数据
更新日期: 2007 年 5 月 20 日 使用下表可以确定各种版本的 Microsoft SQL Server 2005 支持哪些功能。有关 SQL Server 2005 Enterprise E
当从Excel导入数据到Sql Sever中,可能会出现以下问题:
对于指定的缓冲区大小而言,源列的数据太大