SQL Server中,索引是提高查询性能的关键。创建主键时自动创建聚集索引,非聚集索引用于快速查找。面试常问:什么是覆盖索引?它是指查询只需读取索引就能获取所有列数据,无需回表。技巧:合理设计索引,避免过多索引导致插入更新变慢。
常见面试题:SQL Server事务的隔离级别有哪些?
SQL Server支持五种事务隔离级别:ReadUncommitted(读未提交)、ReadCommitted(读已提交,默认)、RepeatableRead(可重复读)、Serializable(串行化)和Snapshot(快照)。选择隔离级别时,平衡一致性和性能。经验:高并发场景用Snapshot隔离,避免脏读和幻读。
数据库基础:主键与外键区别
主键用于唯一标识表中每一行数据,不能为空且唯一。外键是另一个表的主键引用,建立表间关系。应用技巧:在设计表时,先规划主键,再设置外键约束,确保数据完整性。面试解析:违反外键约束会报错,无法插入无效数据。
SQL Server存储过程优势与编写
存储过程预编译,提高执行速度,减少网络传输。示例代码:CREATE PROCEDURE GetEmployee @Id INT AS SELECT * FROM Employees WHERE Id = @Id; 调用:EXEC GetEmployee 1; 面试问答:存储过程比直接SQL快吗?是的,因为缓存执行计划。
优化查询技巧:使用EXPLAIN或执行计划
在SQL Server Management Studio,按Ctrl+M查看执行计划,识别全表扫描。技巧:WHERE条件放前面,避免SELECT *,用TOP限制行数。聚合经验:JOIN时小表驱动大表,性能提升明显。
触发器应用场景
触发器在INSERT、UPDATE、DELETE后自动执行,常用于审计日志。示例:CREATE TRIGGER tr_EmployeeUpdate ON Employees AFTER UPDATE AS INSERT AuditLog VALUES(...); 注意:触发器嵌套可能导致无限循环。
窗口函数基础
SQL Server 2005+支持窗口函数,如ROW_NUMBER() OVER(ORDER BY Salary DESC),用于排名。面试题:求每组前N名?用PARTITION BY Dept ORDER BY Salary DESC。
FAQ
Q: SQL Server分页怎么实现?
A: 用OFFSET FETCH NEXT,如SELECT * FROM Table ORDER BY Id OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;
Q: 死锁怎么避免?
A: 统一锁顺序,缩短事务时间,用WITH(NOLOCK)读未提交数据;
Q: 临时表与表变量区别?
A: 临时表支持索引,事务回滚影响它;表变量轻量,不支持统计信息,适合小数据集。