从去年4月到现在的开博以来,我写了不少关于MS SQL的文章,感觉自己对MS SQL越来越了解,今天下午在一个SQL Server的技术群文档看到了一个文档,是黄钊吉上传的,我对他的印象,总觉得他是MS SQL的大牛,不管是从,还是出版的。前段时间看他在群里招人,是以师带徒的形式,估计是升职,或者自己要请假一段时间,找个靠谱的助手。看了下自己对MS SQL的了解,还是觉得不能太胜任。这事也就随着群里聊天记录的不断刷屏慢慢淡忘了。今天在群里翻看了下群文件,发现了"我踩过的听过的那些坑.txt"文档,我看了下,对自己蛮有启发的。
因此,我打算写篇文章来回答他在文档里提的一些问题,我觉得,这些问题对于想从事DBA工作的都有一定的借鉴意义,本人水平有限,如果回答不正确,欢迎各位留言帮我一起修正,谢谢大家!
- SQL Server 最小存储单元是什么?多大?再上一层存储单元是什么?多大?答:或,8kb大小,上一层是。
- 堆表和非堆表的本质区别?答:没有聚集索引,非堆表有,看具体情况,可以是和。
- SQL Server目前有多少种高可用技术?分别是什么?答:这个不是很清楚,目前只知道公司现在服务器在用的群集技术,有2个节点,允许一台服务器当机,另一台服务器会自动继续服务。
- SQL Server有多少种索引?尽可能列出来。答:总的有和,另外有覆盖索引和过滤索引。聚集索引和非聚集索引都是B树结果,区别是,非聚集索引根据所在表的不同,如果在聚集表(表里已经有一个聚集索引),则,如果在堆表(没有索引),则。覆盖索引是,可以用来避免书签查找。过滤索引。
- SQL Server有多少个系统库?答:4个,mater,model,msdb,tempdb。其实还有两个系统数据库,一个是Resource Database,另一个是distribution(建了复制才有)。(感谢完善)
- 如果一个报表存储过程很慢,你的思路是什么?答:
- 图形化执行计划阅读顺序?答:
- 怎么在SSMS中得知某个SQL语句的物理读、逻辑读次数?答:可以使用。
- Profiler/SQL Trace和Extent Event相比,在过滤数据的行为上有什么不同?答:目前只了解过Profile,可以用它来跟踪SQL语句,区别不知道。
- 有下面一个表:
1 CREATE TABLE T(ID Int identity(1,1),aqty int,bqty int)
大致数据如下:
1 1 22 2 33 2 14 3 5....假设数据有几百万,现在有个语句很慢:1 SELECT ID2 FROM T3 WHERE aqty>bqty
列上已经有索引,你能想到root cause是什么?你会怎么优化?
答:表扫描。(感谢完善。)补充:这个当然是表扫描,条件无法使用索引,只能一条条的判断了。而且表扫描也不是最慢的,在有些场景下如果索引和查询使用的不好会导致性能暴跌,甚至不如表扫描。(感谢完善) - 你觉得为什么跨服务器多表关联查询时“可能”性能很差?你能想到哪些可以提升跨服务器查询时性能低下的方法?答:暂无思路。可以参考下分布性查询或分布性事务,您也许有所发现:)(感谢完善)
- 如何清空有外键的表的数据?答:可以尝试取消外键约束,再用truncate后加会外键约束。
- LDF暴增怎么办?你先查哪个DMV?答:
- 如果某个JOB的所有者是sa,能不能禁用sa?答:应该不可以吧,除非还有别的管理员账号。你可以测试下。如果不行,那么原来用sa创建的job,后来禁用了sa,所有job都不能运行吗?(感谢完善)
- SSMS修改一个表的一列的数据类型 ,与用T-SQL实现ALTER TABLE 的底层实现区别在哪? 答:不是很清楚,一般小表用SSMS可以修改成功,大表会提示超时,只能用T-SQL语句来修改。
- UNION 和UNION ALL从性能上的区别是什么?答:暂无思路。只知道UNION可以踢掉重复的记录。补充:如果确认两个查询无重复记录用UNION ALL更好些,不需要去重步骤。(感谢完善。)
- 初始安装SQL Server 2008及其以上版本时,SQL Server默认是什么启动账号?答:应该是network service。
- 不在域中的两台服务器做数据库镜像,与在域环境相比,必不可少的一个操作是什么?答:设置host文件。(感谢回答)必需创建证书。这是镜像在域或非域中最大的区别。(感谢完善)
- 事务复制对表最起码有哪个硬性要求?答:表必须有主键!(感谢回答)
- 你能不能猜到什么结果?为什么?
1 DECLARE @demo VARCHAR2 SET @demo = '你猜猜会怎样?'3 SELECT @demo
答:没有指定VARCHAR长度会显示空白,在SSMS里运行的真的是空白。(感谢回答)
补充:你没有指定varchar长度,默认是长度1,中文占两个字节,显示?或者乱码,如果是下列语句:1 DECLARE @demo VARCHAR2 SET @demo = '123' 3 select @demo
会显示1。(感谢回答)
补充:因为DECLARE @demo VARCHAR没有定义长度,而且存中文更建议用NVARCHAR。(感谢完善) - 怎么优化这段代码?
1 USE AdventureWorks2014 --AdventureWorks均可不一定是20142 GO3 DECLARE @date DATE = '2013-09-30'4 SELECT SalesOrderID,5 SalesOrderDetailID,6 ModifiedDate7 FROM Sales.SalesOrderDetail8 WHERE CONVERT(VARCHAR(20), ModifiedDate, 23) = CONVERT(VARCHAR(20), @date, 23)
答:,应该做如下修改:
1 USE AdventureWorks2012 --AdventureWorks均可不一定是20142 GO3 DECLARE @date DATE = '2013-09-30'4 SELECT SalesOrderID,5 SalesOrderDetailID,6 ModifiedDate7 FROM Sales.SalesOrderDetail8 WHERE ModifiedDate = CONVERT(datetime,@date)
- 十万左右的数据要作为临时数据,你用临时表还是表变量?大概说说理由。答:。
- 入职后大概工作:
- 完成大概5~8份文档,所以你需要有一定的文档编写水平。
- 协助我完成数据库源代码管控任务。
- 逐步接手目前为止8台服务器大概60个数据库,目前只用了事务复制(这个最重要,…………你接不起常规管理到时就搞死我)
- 常规管理包含但可能不仅限于:
- 备份还原
- 处理复制问题(不会的找X东大牛)
- 初中级T-SQL优化
- 数据库日常监控
- 一年之内逐步读完这些书,不好意思,我没有中文版,也不会翻译好然后给你读
- 协助我实现SQL Server运维自动化,但是目前我还没有想法,只知道要做。
- 能满足的以后还有机会做你想做的事情。
《Training Kit (Exam 70-461)》和《Training Kit (Exam 70-462)》需要的童鞋可以站内短信联系(发现自己可以用微云分享,现已经加上链接),由于文件太大,不能上传到博客园文件,我会发到你邮箱。
对于上述加粗的问题,大家如有更好的回答,欢迎帮我一起修正。
让我们一起继续前行!