一次笔试题三个经典问题的总结

问题一:索引是否一定会提高查询效率?

首先可以很肯定的回答“不一定”,但很明显,出题者的意图在于你写出具体情况和原因。

建立索引的目的是加快对表中记录的查找或排序。

为表设置索引要付出代价的:

一是增加了数据库的存储空间;

二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)

建立合适的索引,一般情况是会提高查询效率的,

当然T-sql用不用索引,还要看SQL Server计算出来的成本,

而且SQL Server有时候还会生成不好的执行计划,就算有索引也不会使用它。

另外当查询结果返回数据量超过表的总数据量的一定比例(一般20%以上)的时候有无索引速度没有差异

问题二:一个系统,你使用了一年后,系统响应突然变慢了,请分析变慢的原因

这个可能有很多,最容易出现的是由于数据的增多,缺失索引造成的性能下降会显同出来,

还有就是对于线性增长的数据量,统计信息也会更新的越来越慢,导致执行计划变得很差。

当然具体问题具体分析,需要排查,不仅是db方面,web应用程序池也可能会出故障,变

慢首先要确定是app还是db,如果是db,需要看程序执行的这些sql语句实际效率如何,这

个就是所谓的调优,调优最小的成本是加索引或修改sql或数据归档,这个过程需要判断

瓶颈,如果是硬件原因)CPU/Memory/IO),需要升级硬件解决。

问题三:有一个很大的表,建立索引一般需要注意些什么,在什么字段合理??

很大的表建索引,一般需要考虑建索引的时间、建索引花费的时间、锁表的时间、

加索引对写造成的影响、对查询语句有多大的性能提升等等。在什么字段合理,

我估计考者的意思应该是较窄的字段类型,不过具体问题还要具体分析,原则

上虽然是这样,但实际中却往往需要找一个平衡点。

此外在设计阶段,可以根据功能和性能的需求进行初步的索引设计,

这里需要根据预计的数据量和查询来设计索引,可能与将来实际使

用的时候会有所区别。此外,

关于索引的选择,应改主意:

A、 根据数据量决定哪些表需要增加索引,数据量小的可以只有主键。

B、 根据使用频率决定哪些字段需要建立索引,选择经常作为连接条件、

筛选条件、聚合查询、排序的字段作为索引的候选字段。

C、 把经常一起出现的字段组合在一起,组成组合索引,组合索引的字

段顺序与主键一样,也需要把最常用的字段放在前面,把重复率低

的字段放在前面。

D、 一个表不要加太多索引,因为索引影响插入和更新的速度。

问题不多,后续还会有补充,对于面试,专门建了一个讨论群组,在面试方面相互交流一下的朋友可以加一下,大家一起抱团取暖。

一次笔试题三个经典问题的总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值