版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQLServer高频面试题及详细答案(实操版)一、基础语法类(入门高频)1、简述SQLServer中char、varchar、nchar、nvarchar的区别?这四个都是字符串存储类型,核心区别在于是否可变长度、是否支持Unicode字符、存储占用空间,是日常开发最常用的字段类型:char(n):固定长度非Unicode字符。无论存储内容多少,都会占用n个字节,不足长度自动补空格。查询效率高,但浪费存储空间,适合长度固定的数据,比如手机号、身份证号、编码。varchar(n):可变长度非Unicode字符。占用空间为实际内容长度,最大存储8000字节。只能存储英文、数字、半角符号,不适合存储中文,适合用户名、备注、地址等短文本。nchar(n):固定长度Unicode字符。每个字符固定占用2字节,支持中文、特殊符号等所有字符,长度不足补空格,适合固定长度的中文数据,比如性别、岗位名称。nvarchar(n):可变长度Unicode字符。最常用的字符串类型,每个字符占2字节,按需占用空间,支持所有字符,无空格冗余。nvarchar(max)可存储超大文本,适合文章、详情描述等长内容。实操总结:存中文必须用nchar/nvarchar,固定长度用char/nchar,可变长度用varchar/nvarchar。2、NULL和空字符串''的区别?NULL:代表未知、未赋值、无数据,不占用存储空间。判断NULL不能用=、!=,必须用ISNULL、ISNOTNULL。空字符串'':代表已赋值、内容为空的有效值,占用极小存储空间。可以直接用=''、!=''判断。常见坑:COUNT(字段)会忽略NULL值,但会统计空字符串;WHERE条件中NULL参与运算结果均为未知,会查询不到数据。3、DISTINCT的作用及使用注意事项?作用:去除查询结果中的重复数据,只保留唯一值。注意事项:DISTINCT作用于所有查询字段,而非单个字段,多字段组合重复才会去重;执行效率较低,底层会进行排序去重,大数据量下尽量少用;不能用于WHERE子句,只能放在SELECT之后。二、复杂查询类(中级核心)1、UNION和UNIONALL的区别?两者都是合并多条查询语句的结果集,要求前后查询的字段数量、字段类型一致,核心区别如下:UNION:合并后自动去重、排序,效率低。适用于需要剔除重复数据的场景。UNIONALL:直接拼接结果集,不去重、不排序,无额外运算,效率极高。适用于确认数据无重复,或需要保留重复数据的场景。职场建议:业务开发中优先使用UNIONALL,非必要不使用UNION。2、LEFTJOIN、RIGHTJOIN、INNERJOIN、FULLJOIN的区别?INNERJOIN(内连接):只返回两张表中匹配条件的交集数据,两边无匹配则不展示。是最常用的连接查询。LEFTJOIN(左连接):以左表为基准,展示左表所有数据,右表匹配不到的字段显示NULL。常用于查询主表全部数据+附表关联数据。RIGHTJOIN(右连接):以右表为基准,展示右表所有数据,左表匹配不到显示NULL,日常使用频率极低。FULLJOIN(全连接):返回左右表所有数据,任意一方匹配不到均显示NULL,业务场景极少使用。3、WHERE、GROUPBY、HAVING、ORDERBY的执行顺序?面试高频考点,真实执行顺序(从上到下):FROM表关联→WHERE筛选数据→GROUPBY分组→聚合函数计算→HAVING分组后筛选→ORDERBY排序→SELECT输出字段核心区别:WHERE:分组前筛选,不能使用聚合函数(SUM、COUNT、MAX等);HAVING:分组后筛选,专门用于过滤聚合函数结果。4、子查询和关联查询的优劣对比?子查询:写法简单、逻辑清晰,适合简单嵌套查询。但多层嵌套子查询会导致效率低下,大数据量下容易产生冗余扫描。JOIN关联查询:数据库优化器可自动优化索引、扫描逻辑,执行效率更高,支持多表复杂关联,是企业开发主流写法。总结:简单单条嵌套用子查询,多表关联、大数据量场景优先JOIN。三、索引相关(性能优化核心)1、聚集索引和非聚集索引的区别?索引是提升查询效率的核心,SQLServer索引分两类,核心差异如下:聚集索引:表数据的物理存储顺序和索引顺序完全一致,一张表有且仅有一个聚集索引。默认主键就是聚集索引。查询效率最高,适合范围查询、排序查询。非聚集索引:索引结构和表物理数据分离,索引存储指针指向真实数据。一张表可以创建多个非聚集索引。适合精准查询、单列条件查询,速度略低于聚集索引。补充:聚集索引叶子节点是真实数据,非聚集索引叶子节点是索引指针。2、什么是覆盖索引?有什么作用?覆盖索引指:查询所需的所有字段都包含在非聚集索引中,查询时无需回表查询真实数据,直接通过索引获取全部结果。作用:避免“书签查找/回表操作”,大幅提升查询性能,是日常优化中最常用的索引优化手段。示例:建立索引(姓名),查询select姓名fromuser就是覆盖索引;若查询select姓名,年龄fromuser则需要回表。3、索引失效的常见场景?面试高频,日常优化重点,常见失效场景:索引列使用函数、运算:如YEAR(CreateTime)=2026、Age+10=20;隐式类型转换:字符串字段传数字、数字字段传字符串;使用!=、<>、NOTIN、NOTLIKE反向查询;LIKE以%开头模糊查询:如%张三、%三;OR连接的字段,部分无索引(可通过合并索引优化);数据量过小、索引碎片化严重,数据库自动放弃索引走全表扫描。四、事务与锁机制(进阶重点)1、简述数据库事务的四大特性(ACID)?原子性(Atomicity):事务要么全部执行成功,要么全部回滚,不存在部分执行的情况。一致性(Consistency):事务执行前后,数据库数据完整性、约束规则保持一致,不会出现脏数据。隔离性(Isolation):多个事务并发执行时,相互独立、互不干扰,不同隔离级别控制并发冲突。持久性(Durability):事务提交成功后,数据永久写入数据库,断电、重启不会丢失。2、SQLServer事务隔离级别有哪些?区别是什么?一共5种隔离级别,隔离强度从低到高,并发性能从高到低:读未提交:可读取未提交的事务数据,会出现脏读、不可重复读、幻读,基本不使用。读已提交(默认级别):只能读取已提交数据,解决脏读,存在不可重复读、幻读,业务最常用。可重复读:同一事务内多次读取同一数据结果一致,解决脏读、不可重复读,存在幻读。快照:基于数据快照读取,无锁阻塞,解决三类并发问题,占用tempdb空间。串行化:最高隔离级别,事务串行执行,无并发问题,性能最差,极少使用。三类并发问题:脏读(读未提交数据)、不可重复读(同一事务多次读取结果不同)、幻读(其他事务新增/删除数据)。3、死锁产生的条件及解决、避免方案?死锁四大必要条件:互斥条件、请求保持条件、不可剥夺条件、循环等待条件。四个条件同时满足才会产生死锁。解决方案与优化手段:统一表操作顺序:所有事务统一先操作A表、再操作B表,杜绝循环等待;缩短事务执行时间:避免事务内嵌套复杂查询、循环逻辑,尽快提交/回滚;降低事务隔离级别:在业务允许的情况下,使用读已提交、快照隔离;开启死锁监控,捕获死锁日志,定位冲突SQL优化。五、数据库优化(实战面试高频)1、日常SQL优化的通用思路?从实战角度,优化优先级从高到低:先优化业务逻辑:杜绝冗余查询、重复查询,减少不必要的数据库访问;合理建立索引:高频查询字段建索引、多字段查询建复合索引、避免索引失效场景;优化SQL语句:避免SELECT*、优先UNIONALL、少用子查询嵌套、杜绝反向查询;分页优化:大数据量分页避免OFFSET分页,采用主键筛选分页;控制事务:缩小事务范围,避免长事务锁表、阻塞并发;定期维护:重建索引、清理日志、收缩数据库,减少索引碎片。2、SELECT*为什么不推荐使用?查询多余字段,增加网络传输、内存、IO开销,降低查询效率;无法触发覆盖索引,必然回表查询,浪费索引性能;表结构新增字段后,会导致原有查询结果异常,兼容性差;不利于代码维护,无法直观知晓查询字段。3、如何处理数据库慢查询?通过SQLServer性能监视器、慢查询日志捕获耗时较高的SQL;查看执行计划,定位全表扫描、键查找、索引缺失等问题;针对性添加索引、优化查询语句、调整关联逻辑;检查是否存在长事务、锁阻塞、死锁导致的查询超时;大数据量表考虑分表、分区、读写分离。六、存储过程、函数与触发器1、存储过程的优缺点?优点:预编译执行,执行效率高于普通SQL;封装复杂业务逻辑,减少代码冗余,方便统一维护;减少网络传输,客户端只需传参数,无需传输完整SQL语句;权限管控更安全,可直接分配存储过程执行权限,不开放表权限。缺点:业务逻辑固化在数据库中,版本迭代、调试难度大;过度依赖存储过程会导致数据库压力过大,不利于分布式扩展;可移植性差,切换数据库需要全部重写。2、自定义函数和存储过程的区别?返回值不同:函数必须有返回值(单值/表值),存储过程可以无返回值,可输出多个参数;调用方式不同:函数可嵌入SELECT、WHERE等语句中使用,存储过程需要单独EXEC执行;逻辑限制不同:函数内不能执行增删改、事务操作,只能做数据查询、计算;存储过程支持所有数据库操作、事务、异常捕获。3、触发器的作用及弊端?作用:监听表的增删改操作,自动触发预设逻辑,常用于数据同步、日志记录、数据校验。弊端:隐藏业务逻辑,问题排查困难,出错不易定位;触发执行会拖慢增删改效率,高并发场景容易造成阻塞;多层触发器嵌套容易引发死锁、数据异常,企业开发尽量少用。七、高频实操问答题1、什么是主键、唯一键、外键?区别是什么?主键:唯一标识单条数据,非空、唯一,一张表仅有一个,默认生成聚集索引。唯一键:保证字段数据唯一,允许为NULL,一张表可多个,生成非聚集索引。外键:关联两张表的字段,保证数据参照完整性,防止出现无效关联数据,高并发项目一般会禁用外键,避免锁表阻塞。2、事务中@@TRANCOUNT的作用?@@TRANCOUNT是系统变量,用于统计当前连接的事务嵌套次数。执行BEGINTRANSACTION计数器+1,执行COMMIT计数器-1,计数器为0时事务真正提交;ROLLBACK直接清零计数器,回滚所有事务。日常
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合作伙伴关系维护函(5篇)
- 回复关于技术咨询的回复函(4篇)
- 人教版(新教材)八年级地理第八章第一节《自然特征与农业》练习题课件
- 2026年医疗器械产品注册流程专项训练卷
- 2026年证券从业资格投资顾问业务法规冲刺试卷
- 2026年体育教学专项训练试题汇编
- 江苏省兴华市四校2027届中考物理模拟预测题含解析
- 2026年广播电视播音员主持资格《新闻播报》模拟试卷
- 电商销售与库存系统升级实施手册
- 企业资料丢失数据恢复IT部门预案
- 危险作业监护人奖惩制度
- 肝包虫病超声课件
- 生鲜配送合同三方协议
- 血透科院感课件
- 生产设备安全培训试题及答案解析
- 2025年首都机场地勤考试试题及答案
- 口袋妖怪绿宝石-图文攻略【一周目 二周目】
- 无犯罪记录证明申请委托书模板
- GB/T 33523.700-2025产品几何技术规范(GPS)表面结构:区域法第700部分:区域形貌测量仪器的校准、调整和验证
- 伤口造口专科护士管理
- 电梯特种作业证考试试题及答案
评论
0/150
提交评论