Java 面试机经(初级篇-18期)_面试

Java 面试机经(初级篇-18期)_数据库基础_02

五、数据库基础

  1. 索引是什么?
    答案:
    索引是对数据库中一或多个列值的排序,使用索引可以帮助数据库高效的获取数据的数据结
    构举个栗子,数据库中的索引就相当于书籍中的目录,当我们想找到书中的某个知识点,我们
    可以直接去目录中找,从而快速的定位到想要得到的信息,而不是从首页每页每页的找。

  2. 基本的索引类型有哪些?
    答案:
    有普通索引、唯一索引、主键索引、全文索引
    索引有哪些优点?
    · 主要加快检索速度
    · 唯一索引确保每行数据的唯一性
    · 加速表与表之间的连接
    · 在使用索引的过程可以优化隐藏器,提高系统性能
    索引又有什么缺点?
    · 新增、删除、修改的操作时会导致数据的维护速度下降
    · 占用物理和数据空间

  3. 事务具有哪些基本特征?
    答案:
    · Atomic(原子性) 事务中的一系列的操作要么都成功,要么全部失败
    · Consistency(一致性) 一个成功的事务应该讲数据写入的到数据库,否则就要回滚到最初
    的状态
    · Isolation(隔离性) 事务允许多个用户对同一数据进行并发访问和修改,而不破坏数据的
    正确性和完整性
    · Durability(持久性) 事务结束后,能够将事务处理的结果存储起来

  4. 定义事务的语句有哪些?
    答案:
    · 开始事物:BEGIN TRANSACTION
    · 提交事物:COMMIT TRANSACTION
    · 回滚事务:ROLLBACK TRANSACTION

  5. 数据库中 join 的 left、right、inne、cross joi 的结果集有哪些区别?
    答案:
    以 A,B 两张表为例
    A left join B:选出 A 的所有记录,B 表中没有的以 null 代替
    right join:同理选出 B 的所有记录,A 表中没有的以 null 代替
    inner join:A,B 的所有记录都选出,没有的记录以 null 代替
    cross join (笛卡尔积):A 中的每一条记录和 B 中的每一条记录生成一条记录
    例如 A 中有 4 条,B 中有 4 条,cross join 就有 16 条记录

  6. 什么是主键?什么是外键?
    答案:
    主键是能够确定一条记录的唯一标识,主键的值总是唯一的,并且不可为空的。外键是一个用来建立两个表之间关系的约束。用于与另一张表的关联,并且能够确定另一张表记录的字段,用来保证数据的一致性,外键可以重复存在也可以为空。但是不可以创建不
    存在的外键值。

  7. 在数据库中查询语句速度很慢,如何优化?
    答案:
    1)SELECT 子句中避免使用*号
    2)多表连接时,使用表别名关联字段
    3)多表连接查询时,将表与表之间的关联条件写在 WHERE 左边关联,WHERE 右边再写过
    滤最大的条件
    4)FROM 子句中包含多个表的情况下,将表数据最少的表放在最后,因为数据库的解析器是
    按照从右到左的顺序处理 FROM 子句中的表数据,FROM 子句中写在最后的表将被最先处理
    5)模糊查询 like,
    like ‘关键字%’会走索引,如果使用 like ‘%关键字%’ 和’%关键字’将全文索引
    6)尽可能使用 exists 代替 in,而对于连续的数据可以使用 between 就不要使用 in 和 not in
    7)单独使用 Group By 和 Order by 时,Group By 和 Order by 的列尽可能要有索引,如果没有
    索引,执行过程中会产生临时表,如果 Group By 和 Order by 组合使用时如果条件列不一样,
    也会产生临时表降低效率。
    8)对于 insert 的优化,可以从三个方面入手,插入单条数据时,将数据进行有序(根据索
    引的顺序)插入,插入多条数据时将数据合并到一条语句中执行,例如:insert into
    test(name,age) values(‘xxx’,18),(‘zzz’.20);。对于批量插入多条数据可以使用事务进行插入处理。
    数据库方面优化

  8. 数据库优化方案
    答案:
    1)开启 Mysql 服务的缓存,或者配合使用 Redis,将经常访问的数据放入 Redis 中进行读取
    2)对于经常使用的字段创建索引,合理的使用外键
    3)数据库结构优化,修改字段的大小合适范围,避免冗余浪费,拆分表,视情况而定
    4)数据库配置主从,读写分离