1.索引是什么?作用和优缺点?
以MySQL为例:
索引就是加快检索表中数据的方法,是帮助MySQL高效获取数据的数据结构。
理解:数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。
MySQL数据库几个基本的索引类型:普通索引、唯一索引、主键索引、全文索引
索引优点:
- 索引加快数据库的检索速度
- 唯一索引可以确保每一行数据的唯一性
- 通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能
缺点:
- 导致数据库系统更新数据的性能下降,因为大部分数据更新需要同时更新索引。
- 索引需要占物理和数据空间
2.什么是事务?
事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转账工作:从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行。所以,应该把它们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。
为什么会提出事务:事务的提出主要是为了解决并发情况下保持数据一致性的问题
事务4个基本特征:原子性,一致性,隔离性,持久性
数据库的乐观锁和悲观锁是什么?
数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。
乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。
- 悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作
- 乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。
3.使用索引查询一定能提高查询的性能吗?为什么?
通常,通过索引查询数据比全表扫描要快.但是我们也必须注意到它的代价.
索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时,索引本身也会被修改. 这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5 次的磁盘I/O. 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.使用索引查询不一定能提高查询性能,索引范围查询(INDEX RANGE SCAN)适用于两种情况:
- 基于一个范围的检索,一般查询返回结果集小于表中记录数的30%
- 基于非唯一性索引的检索
4.简单说一说drop、delete与truncate的区别:都表示删除,但是三者有一些差别
- delete和truncate只删除表的数据不删除表的结构
- 速度一般来说: drop> truncate >delete
- delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
- truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger
应用场景:
- 如果想删除表,用drop;
- 想删除部分数据行时候,用delete,并且带上where子句;
- 如果想保留表而将所有数据删除,如果和事务无关,用truncate即可;如果和事务有关,或者想触发trigger,还是用delete;如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。(在没有备份情况下,谨慎使用 drop 与 truncate)
5.超键,候选键,主键,外键分别是什么?
超键:在关系中能唯一标识元组的属性集。(一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键)
候选键:是最小超键,即没有冗余元素的超键。
主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。(一个数据列只能有一个主键,且主键的取值不能为空值Null)
外键:在一个表中存在的另一个表的主键称此表的外键。
6.什么是视图?视图的应用场景有哪些?
视图是一种虚拟的表,具有和物理表相同的功能。视图通常是有一个表或者多个表的行或列的子集,可以对视图进行增,改,查的操作,对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。