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

来源:互联网 发布:索取阿里云免费开通码 编辑:程序博客网 时间:2024/06/09 14:36

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


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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

                 的字段放在前面。

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



回答不全,陆续有补充


原创粉丝点击