面试题(Part One——SQL SERVER)

面试也是一种学习的过程,最近参加了一些面试整理下在面试中提出来的一些问题和相关的解答。

理论知识

索引器的优缺点?

优点:
第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

缺点:
第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

哪些情况适用索引,哪些情况不适用?

适用的情况:
在经常需要搜索的列上
在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构
在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度
在经常需要根据范围进行搜索的列上创建索引
在经常需要排序的列上创建索引
在经常使用在WHERE子句中的列上面创建索引

不适用的情况:
第一,对于那些在查询中很少使用或者参考的列不应该创建索引
第二,对于那些只有很少数据值的列也不应该增加索引(例如性别列)
第三,对于那些定义为text, image和bit数据类型的列不应该增加索引
第四,当修改性能远远大于检索性能时,不应该创建索引

有哪些索引方式?各是什么含义?

聚集索引,非聚集索引,唯一性索引

SQL中存储过程和函数有什么区别?

 本质上没有区别,只是函数比存储过程的限制要多一些,比如:

1、函数只能返回一个值而存储过程可以返回多个值
2、函数可以嵌入到sql中,可以在select中使用,而存储过程不行
3、函数不能用临时表只能用表变量
4、函数实现的功能针对性比较强,而存储过程实现的复杂度比较高
5、函数只能返回表对象或者值,而对于存储过程来说可以有返回参数

SLQ SERVER 支持的3种用户自定义函数?

标量函数,内嵌表值函数,多语句表值函数
标量函数返回除 text、ntext、image、cursor 和 timestamp 之外的任何数据类型
表值函数返回 table:对于内嵌表值函数,没有函数主体;表是单个 SELECT 语句的结果集;对于多语句表值函数,在 BEGIN...END 块中定义的函数主体包含 TRANSACT-SQL 语句,这些语句可生成行并将行插入将返回的表中。

如何更高效的删除500W数据?

普通的删除速度会非常慢,主要有以下几点原因:
a.delete操作会被完整记录到日志里,它需要大量空间和时间;
b.如果删除中间发生中断,一切删除会回滚(在一个事务里);
c.同时删除多行,记录上的锁也许会被提升为排它表锁,从而阻碍操作完成之前有对这个表的操作(有时候会妨碍正常的业务)
常用的办法有2种:
1、分批删除用set rowcount 5000
2、复制不删除的数据到另外一个表(select into),然后(turncate table),然后重命名另外的表
P.S:如果采用了FullRecoveryMode模式,日志会比较大

SQL SERVER 表分区有什么好处和实施步骤?

SQL Server  引入的表分区技术可以让用户把数据分散存放到不同的物理磁盘中,提高这些磁盘的并行处理性能以优化查询性能,也可以将一个大表按一定的查询特点拆分到同一个磁盘的不同文件中,以通过减小每次查询的数据量来提供查询性能。
主要由三个步骤来实现:
1.创建分区函数
2.创建分区架构
3.对表进行分区
参考:http://www.cnblogs.com/Excellent/archive/2013/01/05/2846799.html

如何将当前日期转换成一个整型?

SQL Server  中有个函数convert是用来实现将日期按不同的格式来显示的,所以可以通过该函数来实现将当然日期转换成整型,我们还需要用到getdate()函数获得当前的日期,用到cast()函数做类型转换具体代码如下:

SELECT CAST(CONVERT(VARCHAR,getdate(),112) as int) 当前日期转整型  


你可能感兴趣的:(【,数据库技术,】)