加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

MySQL DBA口试常见题目总结--索引,事宜,存储引擎,优化等

发布时间:2019-08-16 12:14:10 所属栏目:编程 来源:波波说运维
导读:这篇文章首要是针对开拓职员的,以是不涉及到MySQL的处事陈设等操纵,首要包罗索引,事宜,存储引擎,优化等方面。 一、索引 关于MySQL的索引,之前现实上也先容了许多次,这里首要先容一些常用的口试题。 1. 什么是索引?索引是个什么样的数据布局呢? 索引是一

可一再读断绝级别办理了上面不行一再读的题目(看名字也知道),可是如故有一个新题目,就是 幻读,当你读取id> 10 的数据行时,对涉及到的全部行加上了读锁,此时破例一个事宜新插入了一条id=11的数据,由于是新插入的,以是不会触发上面的锁的排出,那么举办才干务举办下一次的查询时会发明有一条id=11的数据,而前次的查询操纵并没有获取到,再举办插入就会有主键斗嘴的题目.

(4) SERIALIZABLE(可串行化)

这是最高的断绝级别,可以办理上面提到的全部题目,由于他逼迫将以是的操纵串行执行,这会导致并发机能极速降落,因此也不是很常用.

4. Innodb默认行使的是哪种断绝级别呢?

InnoDB默认行使的是可一再读断绝级别.

5. MySQL都有哪些锁呢?像上面那样子举办锁定岂不是有点阻碍并发服从了?

从锁的种别上来讲,有共享锁和排他锁。

  • 共享锁:又叫做读锁. 当用户要举办数据的读取时,对数据加上共享锁.共享锁可以同时加上多个.
  • 排他锁:又叫做写锁. 当用户要举办数据的写入时,对数据加上排他锁.排他锁只可以加一个,他和其他的排他锁,共享锁都相斥.

MyISAM支持表锁,InnoDB支持表锁和行锁,默以为行锁

  • 表级锁:开销小,加锁快,不会呈现死锁。锁定粒度大,产生锁斗嘴的概率最高,并发量最低
  • 行级锁:开销大,加锁慢,会呈现死锁。锁力度小,产生锁斗嘴的概率小,并发度最高

6. 锁的优化计策

  • 读写疏散
  • 分段加锁
  • 镌汰锁持有的时刻
  • 多个线程只管以沟通的次序去获取资源

不能将锁的粒渡过于细化,否则也许会呈现线程的加锁和开释次数过多,反而服从不如一次加一把大锁。

三、存储引擎

MySQL DBA口试常见题目总结--索引,事宜,存储引擎,优化等

1. MySQL支持哪些存储引擎?

MySQL支持多种存储引擎,好比InnoDB,MyISAM,Memory,Archive等等.在大大都的环境下,直接选择行使InnoDB引擎都是最吻合的,InnoDB也是MySQL的默认存储引擎.

2. InnoDB和MyISAM有什么区别?

  • InnoDB支持事宜,而MyISAM不支持事宜
  • InnoDB支持行级锁,而MyISAM支持表级锁
  • InnoDB支持MVCC, 而MyISAM不支持
  • InnoDB支持外键,而MyISAM不支持
  • InnoDB不支持全文索引,而MyISAM支持。

四、优化

MySQL DBA口试常见题目总结--索引,事宜,存储引擎,优化等

1. 超大分页怎么处理赏罚?

超大的分页一样平常从两个偏向上来办理.

  • 数据库层面,这也是我们首要齐集存眷的(固然生效没那么大),相同于select * from table where age > 20 limit 1000000,10这种查询着实也是有可以优化的余地的. 这条语句必要load1000000数据然后根基上所有扬弃,只取10条虽然较量慢. 其时我们可以修改为select * from table where id in (select id from table where age > 20 limit 1000000,10).这样固然也load了一百万的数据,可是因为索引包围,要查询的全部字段都在索引中,以是速率会很快. 同时假如ID持续的好,我们还可以select * from table where id > 1000000 limit 10,服从也是不错的,优化的也许性有很多种,可是焦点头脑都一样,就是镌汰load的数据.
  • 从需求的角度镌汰这种哀求….首要是不做相同的需求(直接跳转到几百万页之后的详细某一页.只应承逐页查察可能凭证给定的蹊径走,这样可猜测,可缓存)以及防备ID走漏且持续被人恶意进攻.

办理超大分页,着实首要是靠缓存,可猜测性的提前查到内容,缓存至redis等k-V数据库中,直接返回即可.

2. 有存眷出产情形sql耗时吗?统计过慢查询吗?对慢查询都怎么优化过?

在营业体系中,除了行使主键举办的查询,其他的城市在测试库上测试其耗时,慢查询的统计首要由运维在做,会按期将营业中的慢查询反馈给我们.慢查询的优化起主要搞大白慢的缘故起因是什么? 是查询前提没有掷中索引?是load了不必要的数据列?照旧数据量太大?

以是优化也是针对这三个偏历来的,

  • 起首说明语句,看看是否load了特另外数据,也许是查询了多余的行而且丢弃掉了,也许是加载了很多功效中并不必要的列,对语句举办说明以及重写.
  • 说明语句的执行打算,然后得到其行使索引的环境,之后修改语句可能修改索引,使得语句可以尽也许的掷中索引.
  • 假如对语句的优化已经无法举办,可以思量表中的数据量是否太大,假如是的话可以举办横向可能纵向的分表.

3. MySQL数据库作宣布体系的存储,数据量增大的环境,怎么优化?

  • 计划精采的数据库布局,应承部门数据冗余,只管停止join查询,进步服从。
  • 选择吻合的表字段数据范例和存储引擎,恰当的添加索引。
  • mysql库主从读写疏散。
  • 找纪律分表,镌汰单表中的数据量进步查询速率。
  • 添加缓存机制,好比memcached,apc等。
  • 不常常窜改的页面,天生静态页面。
  • 誊写高服从的SQL。好比 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.

4. 实践中怎样优化MySQL

最好是凭证以下次序优化:

  • SQL语句及索引的优化
  • 数据库表布局的优化
  • 体系设置的优化
  • 硬件的优化

五、其他

1. MySQL中的varchar和char有什么区别.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读