问题一:索引是否一定会提高查询效率?
首先可以很肯定的回答“不一定”,但很明显,出题者的意图在于你写出具体情况和原因。
建立索引的目的是加快对表中记录的查找或排序。
为表设置索引要付出代价的:
一是增加了数据库的存储空间;
二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)
建立合适的索引,一般情况是会提高查询效率的,
当然T-sql用不用索引,还要看SQL Server计算出来的成本,
而且SQL Server有时候还会生成不好的执行计划,就算有索引也不会使用它。
另外当查询结果返回数据量超过表的总数据量的一定比例(一般20%以上)的时候有无索引速度没有差异
问题二:一个系统,你使用了一年后,系统响应突然变慢了,请分析变慢的原因
这个可能有很多,最容易出现的是由于数据的增多,缺失索引造成的性能下降会显同出来,
还有就是对于线性增长的数据量,统计信息也会更新的越来越慢,导致执行计划变得很差。
当然具体问题具体分析,需要排查,不仅是db方面,web应用程序池也可能会出故障,变
慢首先要确定是app还是db,如果是db,需要看程序执行的这些sql语句实际效率如何,这
个就是所谓的调优,调优最小的成本是加索引或修改sql或数据归档,这个过程需要判断
瓶颈,如果是硬件原因)CPU/Memory/IO),需要升级硬件解决。
问题三:有一个很大的表,建立索引一般需要注意些什么,在什么字段合理??
很大的表建索引,一般需要考虑建索引的时间、建索引花费的时间、锁表的时间、
加索引对写造成的影响、对查询语句有多大的性能提升等等。在什么字段合理,
我估计考者的意思应该是较窄的字段类型,不过具体问题还要具体分析,原则
上虽然是这样,但实际中却往往需要找一个平衡点。
此外在设计阶段,可以根据功能和性能的需求进行初步的索引设计,
这里需要根据预计的数据量和查询来设计索引,可能与将来实际使
用的时候会有所区别。此外,
关于索引的选择,应改主意:
A、 根据数据量决定哪些表需要增加索引,数据量小的可以只有主键。
B、 根据使用频率决定哪些字段需要建立索引,选择经常作为连接条件、
筛选条件、聚合查询、排序的字段作为索引的候选字段。
C、 把经常一起出现的字段组合在一起,组成组合索引,组合索引的字
段顺序与主键一样,也需要把最常用的字段放在前面,把重复率低
的字段放在前面。
D、 一个表不要加太多索引,因为索引影响插入和更新的速度。
问题不多,后续还会有补充,对于面试,专门建了一个讨论群组,在面试方面相互交流一下的朋友可以加一下,大家一起抱团取暖。