复试面试题——数据库

  • 什么是存储过程?用什么来调用?有哪些优缺点?

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。
调用:
1)可以用一个命令对象来调用存储过程。
2)可以供外部程序调用,比如:java程序。
优点:
1)存储过程是预编译过的,执行效率高。
2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。
3)安全性高,执行存储过程需要有一定权限的用户。
4)存储过程可以重复使用,可减少数据库开发人员的工作量。
缺点:移植性差

  • 索引是什么?有什么作用以及优缺点?
    索引是对数据库表中一或多个列的值进行排序的结构,是帮助MySQL高效获取数据的数据结构

你也可以这样理解:索引就是加快检索表中数据的方法。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。

MySQL数据库几个基本的索引类型:普通索引、唯一索引、主键索引、全文索引

索引的优点:第一个是可以通过创建唯一性索引,保证数据库表中每一行数据的唯一性。第二个是可以加快数据检索的速度。可以加快表和表之间的连接。在使用分组和排序子句进行数据检索时,同样可以减少分组和排序的时间。然后通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统性能。
缺点:第一个,索引可能会带来磁盘空间的开销和处理开销,可能会降低查询的性能。第二个是如果有太多的索引会让设计不稳定,第三个是如果需要检索大量的数据使用索引效率反而会更低。然后第四个是,当数据的修改需求大于检索需求时,索引反而会降低性能。

  • 哪些列适合建立索引、哪些不适合建索引?什么样的字段适合建索引
    一般来说,应该在这些列上创建索引:
    (1)在经常需要搜索的列上,可以加快搜索的速度;
    (2)在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
    (3)在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
    (4)在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
    (5)在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
    (6)在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
    对于有些列不应该创建索引:
    (1)对于那些在查询中很少使用或者参考的列不应该创建索引。
    (2)对于那些只有很少数据值的列也不应该增加索引。
    (3)对于那些定义为text, image和bit数据类型的列不应该增加索引。
    (4)当修改性能远远大于检索性能时,不应该创建索引。

唯一、不为空、经常被查询的字段适合建索引

  • 使用索引查询一定能提高查询的性能吗?为什么
    通常,通过索引查询数据比全表扫描要快.但是我们也必须注意到它的代价.

索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时,索引本身也会被修改. 这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5 次的磁盘I/O. 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.使用索引查询不一定能提高查询性能,索引范围查询(INDEX RANGE SCAN)适用于两种情况:

基于一个范围的检索,一般查询返回结果集小于表中记录数的30%
基于非唯一性索引的检索

  • IOT索引组织表:在主键索引中存储表中所有的数据。表就是索引,严格的排序的结构,记录在内部已经排好序,可用于代码查询表、全索引表等。
    优点是记录排序,查找效率非常好。能够提高缓冲区缓存效率、减少缓冲区缓存访问、提高可扩展性。获取数据的工作量更小,因为获取数据更快。缺点是插入效率可能会低于堆文件。对于经常更新的表。不适合使用索引组织表,因为维护索引的开销比较大。

  • 外键构建索引:为了确保数据的完整性,在对主表进行操作时,需要对参照表进行加锁操作,如果外键没有索引,查找子记录就会很慢,且参照表被锁的时间就会很长,进而使更多的操作被阻塞,甚至可能会发生死锁。
    例外:如果被参照表很少被修改,或者只在某段没有其他活动的时候进行修改。不一定需要为外键构建索引,盲目地为外界构建索引可能会导致索引重复。

  • B树和B+树的区别

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值