一次笔试题三个经典问题的总结
来源:互联网 发布:索取阿里云免费开通码 编辑:程序博客网 时间: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、 一个表不要加太多索引,因为索引影响插入和更新的速度。
回答不全,陆续有补充
- 一次笔试题三个经典问题的总结
- 一次笔试问题的回答
- 三个经典的博弈问题
- 三个经典的博弈问题
- 一次笔试后的反省总结
- 链表的三个经典问题
- 贪心算法的三个经典问题
- 一道经典的笔试题
- 一套经典的笔试题
- 【Java笔试题】经典出圈问题
- OO设计原则总结的三个问题
- 笔试题一点问题总结
- 一次经典的电话会议
- 过桥问题【经典笔试问题】
- 总结笔试题中的类、结构体的sizeof问题
- C++笔试经典题目总结
- [笔试题] 指出程序片段的三个错误
- 某语音软件公司面试遇到的三个笔试题小结
- 【原】关于GridView文本过长显示的问题和GridView中带有标签模版的分页问题
- WIZ120SR用户手册(版本 1.0)(四)
- 何时使用聚集索引或非聚集索引
- 如何在visio中画虚线框以及如何解决将visio图形复制到word文档中虚线变为实线的问题
- java生成jar包和exe
- 一次笔试题三个经典问题的总结
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- .net WinForm用户控件开发--(4)用户控件的基本属性设置
- 面向对象,封装,静态
- RBCA
- 基于bind2f的异步编程框架
- js 时间
- 继承,多态,接口
- Android ExpandableListView的使用