SQL管理过程中踩过的那些坑

数据分析学习社
数据分析学习社
数据分析学习社
348
文章
0
评论
2021-05-2809:56:08 评论 728 2572字
摘要

SQL管理过程中踩过的那些坑~

1、SQL Server 最小存储单元是什么?多大?再上一层存储单元是什么?多大?答:页或page,8kb大小,上一层是区,一个区有8个页,共64k。
 
2、堆表和非堆表的本质区别?答:堆表没有聚集索引,非堆表有,看具体情况,可以是聚集索引和非聚集索引。
 
3、SQL Server有多少种索引?尽可能列出来。

答:总的有聚集索引和非聚集索引,另外有覆盖索引和过滤索引。

聚集索引和非聚集索引都是B树结果,区别是聚集索引的叶子节点保存的是表的聚集键,非聚集索引根据所在表的不同,如果在聚集表(表里已经有一个聚集索引),则页子节点保存的是指向聚集索引的聚集键,如果在堆表(没有索引),则叶子节点保存的是RID(即文件号:页号:槽号)。

覆盖索引是非聚集索引的叶子节点也保存了要查询的列,可以用来避免书签查找。过滤索引包含条件的索引,这些索引只针对符合条件的数据进行建立,可以针对命中这些条件的记录提高查询效率。

 
4、SQL Server有多少个系统库?答:4个,mater,model,msdb,tempdb。其实还有两个系统数据库,一个是Resource Database,另一个是distribution(建了复制才有)。
 
5、如果一个报表存储过程很慢,你的思路是什么?答:看下执行计划,看看是不是缺少索引,还是统计信息过期,还是具体的查询语句问题。
 
6、图形化执行计划阅读顺序?答:从右到左,从下到上。
 
7、怎么在SSMS中得知某个SQL语句的物理读、逻辑读次数?答:可以使用SET STATISTICS IO  ON。
 
8、Profiler/SQL Trace和Extent Event相比,在过滤数据的行为上有什么不同?答:目前只了解过Profile,可以用它来跟踪SQL语句,区别不知道。
 
9、有下面一个表:
CREATE TABLE T(ID INT IDENTITY(1,1),aqty INT,bqty INT)
大致数据如下:
1 1 22 2 33 2 14 3 5....假设数据有几百万,现在有个语句很慢:
SELECT IDFROM TWHERE aqty>bqty
列上已经有索引,你能想到根本原因是什么?你会怎么优化?
答:表扫描。条件无法使用索引,只能一条条的判断了。而且表扫描也不是最慢的,在有些场景下如果索引和查询使用的不好会导致性能暴跌,甚至不如表扫描。
 
10、你觉得为什么跨服务器多表关联查询时"可能"性能很差?你能想到哪些可以提升跨服务器查询时性能低下的方法?答:可以参考下分布性查询或分布性事务
 
11、如何清空有外键的表的数据?答:可以尝试取消外键约束,再用truncate后加会外键约束。
 
12、LDF暴增怎么办?你先查哪个DMV?答:可以先进行一次完成备份,收缩下日志;空间允许的情况下,先修改日志文件大小,待收缩后,再还原为原来的大小。sys.dm_db_log_space_usage
 
13、如果某个JOB的所有者是sa,能不能禁用sa?答:可以的,禁用sa并不会对JOB有什么影响,依然可以正常执行。
 
14、SSMS修改一个表的一列的数据类型 ,与用T-SQL实现ALTER TABLE 的底层实现区别在哪? 答:一般小表用SSMS可以修改成功,大表会提示超时,只能用T-SQL语句来修改。
 
15、UNION 和UNION ALL从性能上的区别是什么?答:UNION会去掉重复数据,UNION ALL不会去掉重复数据,UNION会消耗更多的资源去查找并去掉重复数据。如果确认两个查询无重复记录用UNION ALL更好些,不需要去重步骤
 
16、初始安装SQL Server 2008及其以上版本时,SQL Server默认是什么启动账号?答:network service。
 
17、不在域中的两台服务器做数据库镜像,与在域环境相比,必不可少的一个操作是什么?答:设置host文件。必需创建证书。这是镜像在域或非域中最大的区别。
 
18、事务复制对表最起码有哪个硬性要求?答:表必须有主键
 
19、你能不能猜到什么结果?为什么?
DECLARE @demo VARCHARSET @demo = "你猜猜会怎样?"SELECT @demo
答:没有指定VARCHAR长度会显示空白,没有指定varchar长度,默认是长度1,并不是0。中文占两个字节显示,如果是下列语句:
DECLARE @demo VARCHARSET @demo = "123"SELECT @demo
会显示1。如果使用的是NVARCHAR则默认长度是2。
20、怎么优化这段代码?
USE AdventureWorksGODECLARE @date DATE = "2013-09-30"SELECT SalesOrderID,   SalesOrderDetailID,   ModifiedDateFROM Sales.SalesOrderDetailWHERE CONVERT(VARCHAR(20), ModifiedDate, 23) = CONVERT(VARCHAR(20), @date23)
答:不应该在条件里使用表达式,应该做如下修改:
USE AdventureWorksGODECLARE @date DATE = "2013-09-30"SELECT SalesOrderID,   SalesOrderDetailID,   ModifiedDateFROM Sales.SalesOrderDetailWHERE ModifiedDate = CONVERT(datetime,@date)

 

21、十万左右的数据要作为临时数据,你用临时表还是表变量?大概说说理由。答:使用临时表,临时表上可以建立索引,可以使用统计信息来优化。
 
22、入职后大概工作:
    • 完成大概5~8份文档,所以你需要有一定的文档编写水平。
    • 协助完成数据库源代码管控任务。
    • 逐步接手目前为止8台服务器大概60个数据库,目前只用了事务复制
    • 常规管理包含但可能不仅限于:
    备份还原
    处理复制问题
    初中级T-SQL优化
    数据库日常监控

End.

作者:Woodytu

转载如果涉及作品、版权其他问题请联系我们第一时间删除微信号:lovedata0520)

更多文章前往首页浏览http://www.itongji.cn/

  • 我的微信公众号
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: