首先声明:这是本人的答案,并非官方答案,不要盲目追捧,因为觉得这问题很具有代表性,很多人想了解,所以记下,顺便让广大园友也来给本人打打分。因为本人平时用sqlserver2000,所以大多基于sql2000回答。
问题如下:
答:
char 是定长的字符类型,若长度不够自动在后面补足够的空格 ;
varchar是可变长度的字符类型,具长度体根据存入的数据而定;
nvarchar可理解为unicode的可变长度字符类型;
xml类型的字段没用过,因为感觉xml用不上索引;
2. 系统DB有哪些,都有什么作用,需不需要做备份,为什么;损坏了如何做还原(主要是master库);
答:
msdb 保存计划任务,作业之类的信息,需备份,否则会丢失作业和备份计划;
master的还原要依赖于sqlcmd,估计很少人经常干这事,所以这时候应该查下资料;
3. 有哪些操作会使用到TempDB;如果TempDB异常变大,可能的原因是什么,该如何处理;
答:
异常变大的原因是执行的操作返回的记录集过大造成,找出该语句优化,减少数据范围,或者分批操作这些数据;
4. Index有哪些类型,它们的区别和实现原理是什么,索引有啥优点和缺点;如何为sql语句创建合适的索引,索引创建时有哪些需要注意的项,如何查看你创建的索引是否被使用;如何维护索引;索引损坏如何检查,怎么修复;T-sql有更好的索引存在,但是运行时并没有使用该索引,原因可能是什么;
答:
一般索引的创建要依赖于 where 和 order by 这两个关键字,执行计划可以看出是否用到了索引;
还没遇到过索引损坏的情况,如果损坏,重建之;
用不到索引可能是索引碎片过多 ,可进行碎片整理,若不行可加强制索引with(index( 索引名 ))
5. 视图上我们能建索引吗,如果能建的话,会啥好处和坏处;视图上建索引和表上建索引有啥区别;
答:
有索引视图,不过本人从来不用, 因为视图被定义为一个虚拟表,如果对其创建索引,需要具备一些苛刻的条件,也不易维护,所以从来不用;
答:
sql2000下是通过 master.dbo.sysjobs 来查看作业信息;系统正在运行的语句可通过 master.dbo.sysprocesses 结合 dbcc inputbuffer 来查看,一般查堵塞这个很管用(关于堵塞的定位可看我的另外一篇博客,sqlserver阻塞定位 );
7. 在线系统,一个表有五千万记录,现在要你将其中的两千万条记录导入到另一台服务器的某个表中,导完后,需要将这两千万数据删
除,你预备如何处,优缺点是什么;
答:
这个的我之前专门写了一篇博客,
在这里 SQLServer DBA 三十问之我答(第7题)
8. 数据库服务器报磁盘空间不足,你将如何应对,要求尽快恢复;
答:
9. 临时表、表变量、CTE(公用表表达式)有啥区别和联系,保存位置有啥不一样,使用时如何决定选哪种;
答:
临时表,保存在 tempdb中,
如果只使用一次cte应该是最好的,如果要重复多次使用同一个记录集,我个人认为还是表变量,
答:
隔离级别: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是广大的程序员的弱项。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。