Mysql的基础问题原理
存储引擎:
存储引擎是Inndb。它支持行级锁,以及表级锁,
支持事务操作,
需要主键,若未声明主键,则会寻找表中的 not null 以及 unique 修饰的字段。若表中无此类字段,会隐式生成字段。
索引:
索引是为了优化查询的速率而创建的数据结构。
他的底层是B+树,(B+树的特点:b+树相对于平衡二叉树,他的阶数更多。所以他的查询效率比两个叶子节点的查询效率更快,相对于b树来说,B+树将所有的字段数据存放在叶子节点并且使用双向链表连接。这样更便于范围查询以及扫库)。当然索引也存在弊端。索引在每次数据库发生变化时需要维护。所以索引适合多查询,少修改的情况。
索引创建的规则:
当表数据量大的情况下适合创建。
字段差异大的情况下。
经常被group by,order by的数据。
聚簇索引和非聚簇索引:
聚簇索引将主键作为索引来排序的,将全部的字段信息存放在叶子节点中。
非聚簇索引就是,程序员选取某个字段作为索引来排序的,关联主键数据。
联合索引:根据顺序选取多个字段,作为索引排序的,在关联主键的数据。
回表查询:使用非聚簇索引查询后,未得到需要的全部信息,在根据主键去查询所需要的数据。
索引失效原因:
违反最左前缀法则:使用联合索引时,未按顺序条件查询字段信息。导致索引失效。
模糊查询:左模糊或者全模糊。以上因为字段信息不确定,导致索引无法发挥作用。
用在条件中进行函数运算:
在双引号使用类型转换:因为索引也是根据字段排序来创建的。由于类型转换导致索引的比较逻辑转变。索引就会失效。
条件时不等于。
索引失效的底层就是,无法根据条件进行排序。
Mysql的执行计划:
使用关键字Expplain,可以查询mysql对于语句的优化建议,以及表的索引是否生效。
Mysql的事务:
ACID:
A:原子性 :事务完成或者失败只会导致数据只有两种情况,要么执行所有语句,要么不执行。
C:一致性:由一个合法状态转化为另一个合法状态
I:隔离性:一个事务的执行不会因为其他事务的执行而影响。由底层的MVCC确保
D:持久性:当事务提交后,数据会持久化到磁盘信息。
事务的隔离级别:读未提交,读已提交,可重复读,串行化
并发事务出现的问题:脏读,不可重复读,幻读
Mysql的日志:
undo log、redo log、bin log
redo log 记录的是表修改语句(同aof一般)
undo log:是在事务进行时,记录对应的操作信息
三范式:
字段是原子的,不可以拆分
表中必须有主键
字段和主键必须相关
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!