版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQLServer面试题及详细答案(实战完整版)一、基础语法类(入门必考)1、SQLServer中char、varchar、nvarchar的区别?答案:char(n):固定长度字符类型。定义长度后,无论实际存储多少字符,都会占用n个字节,剩余空间自动补空格。查询效率高,适合存储长度固定的数据,比如手机号、身份证号、性别。最大长度8000字符。varchar(n):可变长度非Unicode字符类型。实际占用空间为真实字符长度,不补空格,节省存储空间。只能存储英文、数字、半角符号,存储中文会乱码。最大长度8000字符。nvarchar(n):可变长度Unicode字符类型。所有字符(中文、英文、符号)统一占用2个字节,不会出现乱码,是项目中最常用的字符串类型。最大存储4000字符,可使用nvarchar(max)存储超大文本。2、DISTINCT的作用及使用注意事项?答案:作用:去除查询结果集中的重复数据,只保留唯一数据。注意事项:DISTINCT作用于所有查询列,不是单独某一列,多列查询时,只有所有列数据完全一致才会判定为重复。执行效率较低,底层会进行排序去重,大数据量场景尽量少用,可通过唯一索引、分组查询替代。不支持对索引字段随意去重,会失效索引查询。3、WHERE和HAVING的区别?答案:执行顺序不同:WHERE在分组(GROUPBY)之前执行,过滤原始表数据;HAVING在分组之后执行,过滤分组后的结果集。筛选对象不同:WHERE针对表中单行数据筛选;HAVING针对分组后的聚合结果筛选。聚合函数使用不同:WHERE中不能使用SUM、COUNT、MAX等聚合函数;HAVING可以使用聚合函数。索引适配不同:WHERE条件可命中索引,效率高;HAVING无法使用索引,仅用于分组后过滤。示例:先筛选有效用户,再统计订单数大于10的用户SELECTUserID,COUNT(OrderID)FROMOrdersWHEREIsValid=1GROUPBYUserIDHAVINGCOUNT(OrderID)>104、UNION和UNIONALL的区别?答案:去重差异:UNION会自动去除两个结果集的重复数据;UNIONALL直接拼接所有数据,不去重。效率差异:UNION需要排序去重,性能远低于UNIONALL;无去重需求时,项目中一律使用UNIONALL。排序规则:UNION会默认排序结果集;UNIONALL保留原始查询顺序。通用要求:两个查询语句的列数、对应列的数据类型必须一致。二、多表查询类(高频实操)1、内连接、左连接、右连接、全连接的区别?答案:INNERJOIN(内连接):只返回两张表中匹配成功的数据,两边无匹配的数据全部过滤,是最常用的连接方式。LEFTJOIN(左连接):以左表为基准,返回左表所有数据,右表匹配不到的字段填充NULL。常用于查询主表全部数据、关联附表补充信息的场景。RIGHTJOIN(右连接):以右表为基准,返回右表所有数据,左表匹配不到的字段填充NULL,日常开发使用极少。FULLJOIN(全连接):返回左表、右表所有数据,任意一方匹配不到的字段填充NULL。2、子查询有哪些类型?什么是相关子查询?答案:子查询分为独立子查询和相关子查询。独立子查询:子查询可单独执行,不依赖外层查询,执行顺序为先执行子查询,再执行外层查询,效率较高。相关子查询:子查询依赖外层查询的字段,无法单独执行。外层查询每遍历一行数据,就会执行一次子查询,数据量大时性能极差,开发中尽量优化为连接查询。三、索引专题(面试核心)1、SQLServer有哪些索引类型?各自特点?答案:常用索引分为聚集索引、非聚集索引,还有唯一索引、复合索引、包含索引等衍生索引。聚集索引(ClusteredIndex):表的数据行按照聚集索引键排序存储,索引页和数据页合一,查询速度最快。一张表只能有一个聚集索引,默认主键就是聚集索引。非聚集索引(Non-ClusteredIndex):单独存储索引结构,索引页存储索引键和数据行指针,需要二次查找数据。一张表可以创建多个非聚集索引,适合高频查询、非排序字段。复合索引:包含多个字段的索引,遵循最左前缀原则,查询条件需要匹配索引左侧字段才能命中索引。唯一索引:保证索引字段数据唯一,不允许重复,允许单个NULL值。2、什么是索引最左前缀原则?答案:创建复合索引(a,b,c)时,索引的生效遵循最左匹配规则:查询条件包含最左侧字段a,索引可正常命中;仅查询b、c或仅查询c,无法命中索引;匹配过程中断后,后续字段无法使用索引。例如wherea=1andc=2,仅a字段走索引,c字段无效。开发建索引原则:高频查询字段放左侧,筛选度高的字段优先。3、索引失效的常见场景?答案:日常开发最常见的失效场景:索引字段使用函数、运算:如YEAR(CreateTime)=2026、ID+1=100隐式类型转换:字符串字段传数字、数字字段传字符串使用!=、<>、NOTIN、NOTLIKE反向查询LIKE以%开头模糊查询:如%张三、%张%复合索引不满足最左前缀原则数据量过小、数据重复率极高(索引性价比低,数据库自动放弃索引)OR连接非索引字段,导致整体索引失效四、事务与锁(进阶必考)1、什么是事务?事务的四大特性(ACID)?答案:事务是一组不可分割的SQL操作单元,要么全部执行成功,要么全部回滚,用于保证数据一致性。四大特性:原子性(A):事务整体不可拆分,全部成功或全部失败回滚。一致性(C):事务执行前后,数据库数据完整性、约束规则保持一致。隔离性(I):多个事务并发执行时,相互独立、互不干扰,通过隔离级别控制并发问题。持久性(D):事务提交成功后,数据永久写入数据库,断电、重启不会丢失。2、SQLServer事务隔离级别有哪些?各自问题?答案:共5种隔离级别,越往后隔离性越强,并发性能越低:读未提交:允许读取未提交数据,会出现脏读、不可重复读、幻读,基本不用。读已提交(默认级别):只能读取已提交数据,解决脏读,存在不可重复读、幻读。可重复读:事务内多次读取同一数据结果一致,解决脏读、不可重复读,存在幻读。串行化:最高隔离级别,事务串行执行,解决所有并发问题,性能最低,易锁表。快照隔离:基于行版本控制,无锁读取,兼顾并发和数据一致性。核心问题解释:脏读:读取到其他事务未提交、最终回滚的无效数据。不可重复读:同一事务内,两次查询同一数据,结果被其他事务修改,前后不一致。幻读:同一事务内,范围查询的数据被其他事务新增/删除,前后查询条数不一致。3、死锁产生的条件及解决办法?答案:死锁四大必要条件(缺一不可):资源互斥、请求保持、不可剥夺、循环等待。解决和优化方案:统一SQL执行顺序:所有事务统一操作表的顺序,避免循环等待。缩短事务执行时间:避免事务内嵌套过多查询、业务逻辑,尽早提交。合理设置锁超时,开启死锁监控,捕获死锁日志定位问题SQL。降低事务隔离级别,使用行版本隔离,减少锁竞争。五、函数、存储过程与触发器1、存储过程和普通SQL语句的区别?优缺点?答案:存储过程是预编译在数据库中的SQL代码集合,支持参数、逻辑判断、循环,可重复调用。优点:预编译执行,重复调用性能高于普通SQL;减少网络传输,只需传递参数,无需传递完整SQL语句;统一数据操作逻辑,便于维护,权限管控更精准。缺点:业务逻辑固化在数据库,迁移性差,换数据库需要重写;复杂存储过程调试困难,版本迭代麻烦;过度依赖存储过程会增加数据库服务器压力。2、标量函数、表值函数的区别?答案:标量函数:执行后返回单个值(数字、字符串、日期),可用于查询列、条件判断中。缺点:大数据量循环调用性能较差。表值函数:执行后返回一张临时表,可直接关联查询、筛选数据,分为内联表值函数和多语句表值函数,查询效率更高。3、触发器的作用及弊端?答案:触发器是表发生增删改操作时,自动触发执行的SQL逻辑,常用于数据同步、日志记录、数据校验。弊端:隐藏业务逻辑,排查问题困难,开发人员容易忽略触发器逻辑;嵌套触发容易引发连锁操作,导致数据异常、死锁、性能卡顿;增删改操作会附带触发器执行,大幅降低DML语句性能。日常开发尽量少用触发器,优先在代码层处理数据逻辑。六、性能优化(面试重点)1、SQL查询慢的常见原因和优化思路?答案:常见原因:索引缺失、索引失效、返回冗余数据、事务过长、锁等待、SQL写法不合理、表数据量过大无分表。通用优化思路:索引优化:高频查询字段建索引,遵循最左前缀,避免索引失效场景,定期重建、整理索引碎片。SQL写法优化:杜绝select*,只查需要字段;能用UNIONALL不用UNION;能用连接查询不用相关子查询;避免大表模糊查询、反向查询。数据过滤优化:提前过滤数据,缩小查询范围,减少后续分组、连接、排序的数据量。分页优化:大表分页避免offset大偏移量,使用主键定位分页。架构优化:超大表进行分表、分区,冷热数据分离。2、如何查看SQL执行计划?执行计划重点看什么?答案:SSMS客户端可通过「包含实际执行计划」功能,查看SQL执行详情。重点关注指标:表扫描/聚集索引扫描:代表未走索引,全表遍历,需要优化索引;索引查找:正常走索引,效率最优;高成本操作:排序、哈希匹配、大表嵌套循环,需针对性优化;预估行数和实际行数偏差,判断统计信息是否过时,需更新统计信息。3、索引碎片是什么?如何处理?答案:表频繁增删改会导致索引页数据分散、空洞过多,形成索引碎片,降低索引查询效率。处理方式:碎片率低于30%:执行索引整理,轻量操作,不锁表;碎片率高于30%:执行索引重建,重构索引结构,清理碎片,性能提升明显;定期维护数据库索引,批量优化碎片。七、高频实操手写SQL题1、实现分页查询(第5页,每页10条数据)答案(SQLServer2012+推荐写法):SELECT*FROMOrdersORDERBYCreateTimeDESCOFFSET40ROWSFETCHNEXT10ROWSONLYOFFSET跳过前40条,取后续10条,适配所有分页场景,性能优于ROW_NUMBER分页。2、查询表中重复的数据答案:--查询手机号重复的用户SELECTPhone,COUNT(*)ASCountFROMUserInfoGROUPBYPhoneHAVINGCOUNT(*)>13、删除表中重复数据,保留最新一条答案:WITHTempAS(SELECT*,ROW_NUMBER()OVER(PARTITIONBYPhoneORDERBYCreateTimeDESC)ASRowNumFROMUserInfo)DELETEFROMTempWHERERowNum>14、行转列、列转行简单实现行转列(PIVOT):适用于统计分类数据汇总列转行(UNPIVOT):适用于拆分汇总字段为明细数据八、数据库日常运维面试题1、SQLServer日志文件和数据文件作用?答案:MDF数据文件:存储数据库所有表数据、索引、约束等核心数据,是数据库主体文件。LDF日志文件:记录所有数据库增删改操作日志,用于事务回滚、数据恢复、故障还原。日志文
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (正式版)DB14∕T 687-2017 《马铃薯脱毒原种和良种生产技术规程》
- 汽车维修企业技术升级与服务创新指南
- 建筑工程项目进度管理控制方案手册
- 2026年中国质量协会质量专业能力考试(QC小组活动专业能力)(初级)综合能力测试题及答案三
- 烹饪爱好者分子料理制作指导书
- 2026年司法鉴定人考试试卷及答案
- 安徽省太和县民族中学2027届中考物理五模试卷含解析
- 影视制作团队制片人项目管理KPI考核表
- 医务人员艾梅乙反歧视、性别平等与权益保障考试题库及答案
- 2026年物流管理题库及答案
- 2026年广西玉柴机器集团有限公司人员招聘笔试参考试题及详细答案解析
- 2026年学习叉车理论考试题库及答案一套
- 2026年污水厂安全培训模拟试卷(含答案)
- 疼痛诊疗学绪论及基础知识
- 初中道德与法治七年级《潜能觉醒·多维赋能》跨学科主题学习教案
- 挡土墙拆除施工详细方案解析
- 工程安全三级教育培训课件
- 肿瘤TNM分期课件
- 裸眼3D课件教学课件
- 电解水制氢项目质量评估与验收方案
- 网络攻防实验教案(2025-2026学年)
评论
0/150
提交评论