数据库专项

https://blog.csdn.net/ThinkWon/article/details/104778621
https://www.jianshu.com/p/d9389f27ca1a
https://blog.csdn.net/qq_22222499/article/details/79060495

  1. Mysql和Oracle数据引擎介绍
    参考: https://blog.csdn.net/cafucwxy/article/details/78319414
    https://www.runoob.com/w3cnote/mysql-different-nnodb-myisam.html
    ①:在MySQL数据库中,常用的引擎主要就是2个:Innodb和MyISAM
    Innodb支持事务,还有行级锁和外键的约束
    MyIsAm表锁.且不持支事务
    ②: oracle中不存在引擎的概念,但是oracle有OLTP和OLAP模式的区分

  2. 事务四大特性
    ACID: 原子性 一致性 隔离性 持久性

  3. 事务的并发问题
    脏读:事务A更新了数据,事务B读取了A更新但未提交的数据,之后事务A回滚操作,那么B就是脏读
    不可重复读:事务A多次读取同一数据,事务B在A多次读取的过程中更新并提交了数据,导致A读取的数据不一样(侧重更新,行内容不一样)
    幻读: 事务A多次读取同一数据,事务B在A多次读取的过程中删除或新增了数据并提交了数据,导致A读取的数据不一样(侧重新增和删除,行数量不一样)
    解决方案:解决不可重复读 锁行, 解决幻读需要锁表。

  4. 事务的隔离级别
    读未提交 read-uncommitted :会引发的问题 脏读 不可重复读 幻读
    读已提交 read-committed :会引发的问题 不可重复读 幻读
    可重复读 repeatable-read :会引发的问题 幻读
    串行化 serializable :不会引发问题
    MySql: Innodb支持4种事务 MyIsAm不支持
    Oracle:持支2种事务 READ_COMMITED SERIALIZABLE

  5. InnoDB引擎的行锁是怎么实现的?
    答: InnoDB是基于索引来完成行锁,for update 可以根据条件来完成行锁锁定

  6. 数据库设计的三大范式
    参考: https://blog.csdn.net/xy3233/article/details/86314329
    第一范式: 列不能重复 (列不能分割,一个列中不能有多个属性)
    第二范式: 消除部分依赖 (非主属性依赖主键全部,不是依赖主键的一部分)
    第三范式: 消除依赖传递 (非主属性是直接依赖于主键,还是依赖非主键列)

  7. MySQL B+Tree索引和Hash索引的区别,这是MySql的索引算法?
    ① Hash索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位; 但只能满足 = ,in, >=,<=
    ② B+树索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问;
    参考: https://www.jianshu.com/p/d9389f27ca1a

  8. 聚集索引和非聚集索引区别?
    聚集索引表记录的排列顺序和索引的排列顺序一致,所以查询效率快,缺点就是修改慢
    非聚集索引制定了表中记录的逻辑顺序,但是记录的物理和索引不一定一致
    主键通常自动都是聚集索引
    创建索引,参考https://www.cnblogs.com/zsql/p/13808417.html

  9. 创建索引的原则
    ①:最左前缀匹配原则,组合索引非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)[加粗]就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
    ②:较频繁作为查询条件的字段才去创建索引
    ③:更新频繁字段不适合创建索引
    ④:重复度大的列不适合做索引 如:性别
    ⑤:不要过度使用索引,索引过多,会降低写操作的性能
    ⑥:使用短索引,如果是长字符串索引,应指定一个前缀长度,这样可以节省大量的空间
    ⑦:在where中的列
    ⑧:对于定义为text、image和bit的数据类型的列不要建立索引
    ⑨:索引列应该指定为NOT NULL(非空)

  10. 使用索引一定快吗?
    参考: https://blog.csdn.net/yanyu529584640/article/details/51272454

  11. 数据库优化方案:
    1,加索引 2,sql优化避免索引失效 3,数据库碎片整理 4,数据压缩 5,减少返回数据(分页,只返回必要数据) 6,减少交互次数(批量插入) 7,left join 左边使用数据量小的表

  12. count(),count(1)和count(字段名)的区别
    count(
    ) ≈ count(1)
    count():一共有多少行,空值(null)也算
    count(字段名): 这个字段有多少个,空值(null)不算
    按照效率排序的话,count(字段)<count(主键 id)<count(1)≈count(
    )

  13. 索引失效的场景
    a,函数或表达式或数学运算 例如substr()
    b,like ‘%param’ 百分号放后面可以走索引
    c,is null
    d, !=
    e, 等号两边类型不相等 例如:列是String 条件是 int 转换的时候就不走索引了

  14. 索引生效场景
    a, = 等号两边的类型相等
    b, in
    c, like ‘param%’
    d, > <
    e,between

  15. 组合索引
    参考: https://blog.csdn.net/qq_17555933/article/details/104351791
    ①: 组合索引的字段都在where条件上, 无论顺序如何都会使用索引
    ②: 组合索引的第一个字段必须[加黑]在where条件上, 组合索引会生效
    ③: order by 只能使用第一个字段,才能用到索引
    ④:最左前缀匹配原则,组合索引非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)[加粗]就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。

  16. 慢查询优化
    参考: https://www.yisu.com/zixun/170330.html

  17. 执行计划 参考: https://blog.csdn.net/tengdazhang770960436/article/details/94065557
    explain SELECT * FROM usertable where school_id in (select school_id from schooltale where address= ‘HZ’)
    查询结果: id select_type table type possible_keys key key_len ref rows Extra
    行数: 几行表示有几个子查询
    id​:查询的顺序 id相同 从上而下 id值越大执行优先级别越高
    select_type:查询类型
    table:查询涉及到的表
    type:访问类型
    possible_keys:可能使用的索引
    key:实际使用的索引
    ref:连接匹配条件
    rows:估算的结果集数量
    extra:额外信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值