小言_互联网的博客

妈妈问我,你何时才能成为MySQL专家???

174人阅读  评论(0)

前言:

MySQL在Java企业级开发中十分常用,开源免费并且方便扩展。阿里巴巴数据库系统也大量用到了MySQL,稳定性也有保障。不管是大型互联网项目还是小型传统管理项目,对于MySQL的职能要求越来越高,MySQL的原理、底层、优化,已经成为一个合格的程序员必备技能。

因此二飞特意整理了一些MySQL的常见问题给大家:

存储引擎

MyISAM 是MySQL的默认数据库引擎( 5.5版之前 )。虽然性能极佳,而且提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。不过,5.5版本之后,MySQL引入了InnoDB(事务性数据库引擎),MySQL 5.5版本后默认的存储引擎为InnoDB。
大多数时候我们使用的都是 InnoDB 存储引擎,但是在某些情况下使用 MyISAM 也是合适的,比如读密集的情况下。( 如果你不介意 MyISAM 崩溃恢复问题的话 )。
两者的对比:
  • 是否支持行级锁 : MyISAM 只有表级锁(table-level locking),而InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。
  • 是否支持事务和崩溃后的安全恢复:MyISAM 强调的是性能,每次查询具有原子性,其执行速度比InnoDB类型更快,但是不提供事务支持。但是InnoDB 提供事务支持事务,外部键等高级数据库功能。具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery  capabilities)的事务安全(transaction-safe (ACID  compliant))型表。
  • 是否支持外键: MyISAM不支持,而InnoDB支持。
  • 是否支持MVCC :仅 InnoDB 支持。应对高并发事务, MVCC比单纯的加锁更高效;MVCC只在 READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作;MVCC可以使用乐观(optimistic)锁和悲观(pessimistic)锁来实现;各数据库中MVCC实现并不统一。

经常有人说,“MyISAM比InnoDB快”

这句话对吗?


字符集及校对规则

字符集指的是一种从二进制编码到某类字符符号的映射。校对规则则是指某种字符集下的排序规则。MySQL中每一种字符集都会对应一系列的校对规则。MySQL采用的是类似继承的方式指定字符集的默认值,每个数据库以及每张数据表都有自己的默认值,他们逐层继承。


索引

MySQL索引使用的数据结构主要有BTree索引哈希索引。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。
MySQL的BTree索引使用的是B树中的B+Tree,但对于主要的两种存储引擎的实现方式是不同的。
MyISAM: B+Tree叶节点的data域存放的是数据记录的地址。

InnoDB: 其数据文件本身就是索引文件。


查询缓存的使用

执行查询语句的时候,会先查询缓存。不过,MySQL 8.0 版本后移除,因为这个功能不太实用

my.cnf加入以下配置,重启MySQL开启查询缓存

query_cache_type=1	
query_cache_size=600000
MySQL执行以下命令也可以开启查询缓存
set global  query_cache_type=1;	
set global  query_cache_size=600000;
如上, 开启查询缓存后在同样的查询条件以及数据情况下,会直接在缓存中返回结果
缓存虽然能够提升数据库的查询性能,但是缓存同时也带来了额外的开销,每次查询后都要做一次缓存操作,失效后还要销毁。 因此,开启缓存查询要谨慎,尤其对于写密集的应用来说更是如此。如果开启,要注意合理控制缓存空间大小,一般来说其大小设置为几十MB比较合适。此外,还可以通过sql_cache和sql_no_cache来控制某个查询语句是否需要缓存:
select sql_no_cache count(*) from usr;


什么是事务?
事务是逻辑上的一组操作,要么都执行,要么都不执行。
事务的四大特性(ACID)

原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
一致性(Consistency): 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
持久性(Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

并发事务带来哪些问题?

脏读(Dirty  read)
丢失修改(Lost to modify)
不可重复读(Unrepeatableread)
幻读(Phantom read)

关于MySQL,我们还要知道的是:

事务隔离级别有哪些?MySQL的默认隔离级别是?

锁机制与InnoDB锁算法;
大表优化;
一条SQL语句在MySQL中如何执行的?
MySQL高性能优化规范建议?
一条SQL语句执行得很慢的原因有哪些?

为了让各位同学熟练掌握MySQL,我们特别邀请大数据平台资深专家Deer老师,为大家带来MySQL专题课程—— “面试修仙季,MySql优化从基础到落地”,原价99元,公众号粉丝限时专享优惠价0.1元

“按照老师要求, 跟着课程学完,如果 你还成不了MySQL专家,那就来找我!

Deer老师

享学课堂大数据平台负责人与课程设计总监

专精领域:项目管理,大数据平台管理与开发;

软件开发十年,获sun公司scjp、scwcd国际认证。

课程介绍:
1.从慢查询开始谈优化

慢查询以及工具

 SQL优化全家桶

执行计划全面解析

优化10大策略

2.MySQL进阶知识
从二叉树开始谈索引

面试必问,脏读、可重复度、幻读

四大隔离级别解析

眼界大开,存储引擎大全

粉丝福利:

1、 0.1元白嫖 MySQL系列课程;
2、领取 Java架构进阶路线及学习资料
3、跟着资深专家系列学习 MySQL

发送暗号“ 666 ” 添加小姐姐微信报名吧

"愿你所有的努力都不会白费"

在看的永远18岁!

转载:https://blog.csdn.net/hollis_chuang/article/details/101442878
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场