MySQL(口试篇)

打印 上一主题 下一主题

主题 977|帖子 977|积分 2931

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目录
说一下ACID是什么?
Atomicity(原子性):
Consistency(一致性):
Isolation(隔离性):
Durability(长期性):
MySQL索引时怎样实现的?
怎么验证MySQL的索引是否满足需求?
说一下数据库的事物隔离?
说一下MySQL常用的引擎?
说一下MySQL的行锁和表锁?
说一下乐观锁和悲观锁
如何做MySQL的性能优化?

加油,一起努力 !!!

说一下ACID是什么?

Atomicity(原子性):

一个事物(transaction)中的全部操纵,或者全部完成,或则全部不完成,不会竣事在中间某个环节。事物在实行u工程中发生错误,会被规复(Rollback)到事物开始前的状态,就像者个事物从来没有实行过一样。即,事物不可分割,不可约简。
Consistency(一致性):

在事物开始之前和事物竣事以后,数据库的完整性没有被粉碎。这表示写入的资料必须完全符合全部的预设约束,触发器,级联回滚等。
Isolation(隔离性):

数据库允许多个并发事物同时对其数据进行读写和修改的能力,隔离性可以防止多个四五并发实行时由于交织实行而导致数据的不一致。事物隔离分为差别级别,包罗未提交(Readuncommitted),读提交(read committed),可重复读(repeatable read)和串行化(Serializable)。
Durability(长期性):

事物处理竣事后,对数据的修改就是永久的,即便体系故障也不会丢失。

MySQL索引时怎样实现的?

索引时满足某种特定查找算法的数据结构,而这些数据结构会以某种方式指向数据,从而实现高效查找数据。
具体来说MySQL中索引,差别的数据引擎实现有所差别,但目前主流的数据库引擎的索引都是B+树实现的,B+树的搜刮效率,可以到达二分法的性能,找到数据区域之后就找到了完整的数据结构了,全部索引的性能也是更号的。

怎么验证MySQL的索引是否满足需求?

利用explain检察SQL是否实行查询语句的,从而分析你的索引是否满足需求。
explain语法:explain select * from table where type = 1;

说一下数据库的事物隔离?

MySQL的事物隔离是在MySQL.ini配置文件里添加的,在文件的最后添加:
transaction-icolation = REPEATABLE-READ
可用的配置值:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE。

  • READ-UNCOMMITTED:未提交读,最低隔离级别、事物未提交前、就可被其他事物读取(会出现幻读、脏读、不可重复读)。
  • READ-COMMITTED:提交读,代价最高
  • REPEATABLE-READ:可重复读,默认级别,保证多次读取同一个数据时,其值都和事物开始时候的内容时一致,禁止读取到别的事物未提交的数据(会照成幻读)。
  • SERIALIZABLE:序列化,代价最高最可靠的隔离级别,该隔离级别能防止脏读,不可重复读,幻读。
脏读:表示一个事物能够读取另一个中还未提交的数据。比如某个事物实行插入纪录 A ,此时该事物还未提交,然后另一个事务实行读取了纪录A。
不可重复读:是指在一个事物内,多次读取同一数据。
幻读:指同一个事务内多次查询返回的效果集不一样。比如同一个事务A第一次查询时候有n条纪录,但是第二次划一条件下查询却有n+1条纪录,这就好像产生了幻觉。发生幻读的原因也是另外一个事务新增或者删除或者修改了第一个事务效果集内里的数据,同一个纪录的数据内容被修改了,全部数据行的纪录就变多或者变少了。

说一下MySQL常用的引擎?

InnoDB:InnoDB引擎提供了对数据库acid事务的支持,并且还提供了行级锁和外键的约束,它的设计的目的就是处理大数据容量的数据库体系。MySQL运行的时候,InnoDB会在内存中创建缓冲池,用于缓冲数据和索引。但是该引擎是不支持全文搜刮,同时启动也比较的慢,它是不会保持表的行数的,所以当进行 select count(*) from table 指令的时候,需要进行扫描全表。由于锁的粒度小,写操纵是不会锁定全表的,全部在并发度较高的场景下利用会提拔效率的。
MyIASM:MySQL的默认引擎,但不提供事务的支持,也不支持行级锁和外键,因此当实行插入和更新语句时,即实行写操纵的时候需要锁定这个表,所以会导致效率会降低。不外和InnoDB差别的时,MyIASM引擎时保存了表的行数,于是当进行select count(*) table 语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,假如表的读操纵远远多于写操纵时,并且不需要事务的支持的,可以将MyIASM作为数据库引擎的首选。

说一下MySQL的行锁和表锁?

MyISAM只支持表锁,InnoDB支持表锁和行锁,默以为行锁。
表锁:开销小,加锁快,不会出现死锁。锁定颗粒度大,发生锁辩论的概率最高,并发量最低 。
行级锁:开销大,加锁慢,会出现死锁。锁粒度小,发生锁辩论的概率小,并发度最高。

说一下乐观锁和悲观锁

乐观锁:每次去拿数据的时候都以为别人不会修改,所以不会上锁,但是在提交更新的时候会判断以下在此期间别人有没有去更新这个数据。
悲观锁:每次去拿数据的时候都以为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻止,直到这个锁被释放。
数据库的乐观锁需要自己实现,在表内里添加一个version字段,每次修改乐成值加1,这样每次修改的时候先对比一下,自己拥有的version和数据库现在version和数据库现在的version是否支持,假如不一致就不修改,这样就实现了乐观锁

如何做MySQL的性能优化?


  • 为搜刮字段创建索引
  • 制止利用select * ,列出需要查询的字段
  • 垂直分割分表
  • 选择精确的存储引擎



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

灌篮少年

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表