五、数据库基础
索引是什么?
答案:
索引是对数据库中一或多个列值的排序,使用索引可以帮助数据库高效的获取数据的数据结
构举个栗子,数据库中的索引就相当于书籍中的目录,当我们想找到书中的某个知识点,我们
可以直接去目录中找,从而快速的定位到想要得到的信息,而不是从首页每页每页的找。
基本的索引类型有哪些?
答案:
有普通索引、唯一索引、主键索引、全文索引
索引有哪些优点?
· 主要加快检索速度
· 唯一索引确保每行数据的唯一性
· 加速表与表之间的连接
· 在使用索引的过程可以优化隐藏器,提高系统性能
索引又有什么缺点?
· 新增、删除、修改的操作时会导致数据的维护速度下降
· 占用物理和数据空间
事务具有哪些基本特征?
答案:
· Atomic(原子性) 事务中的一系列的操作要么都成功,要么全部失败
· Consistency(一致性) 一个成功的事务应该讲数据写入的到数据库,否则就要回滚到最初
的状态
· Isolation(隔离性) 事务允许多个用户对同一数据进行并发访问和修改,而不破坏数据的
正确性和完整性
· Durability(持久性) 事务结束后,能够将事务处理的结果存储起来
定义事务的语句有哪些?
答案:
· 开始事物:BEGIN TRANSACTION
· 提交事物:COMMIT TRANSACTION
· 回滚事务:ROLLBACK TRANSACTION
数据库中 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 条记录
什么是主键?什么是外键?
答案:
主键是能够确定一条记录的唯一标识,主键的值总是唯一的,并且不可为空的。外键是一个用来建立两个表之间关系的约束。用于与另一张表的关联,并且能够确定另一张表记录的字段,用来保证数据的一致性,外键可以重复存在也可以为空。但是不可以创建不
存在的外键值。
在数据库中查询语句速度很慢,如何优化?
答案:
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);。对于批量插入多条数据可以使用事务进行插入处理。
数据库方面优化
数据库优化方案
答案:
1)开启 Mysql 服务的缓存,或者配合使用 Redis,将经常访问的数据放入 Redis 中进行读取
2)对于经常使用的字段创建索引,合理的使用外键
3)数据库结构优化,修改字段的大小合适范围,避免冗余浪费,拆分表,视情况而定
4)数据库配置主从,读写分离