PHPer 面试指南-MySQL 篇
87

本书的 GitHub 地址:https://github.com/todayqq/PHPerInterviewGuide

  • 什么是索引,作用是什么?常见索引类型有那些?Mysql 建立索引的原则?

索引是一种特殊的文件,它们包含着对数据表里所有记录的引用指针,相当于书本的目录。其作用就是加快数据的检索效率。常见索引类型有主键、唯一索引、复合索引、全文索引。

  • 索引创建的原则
    • 最左前缀原理
    • 选择区分度高的列作为索引
    • 尽量的扩展索引,不要新建索引
  • SQL 语句的优化原则?
  1. 避免使用 Like 模糊查询
  2. 只列出需要查询的字段,而不是所有
  3. 避免使用 MySQL 函数,尽量让 MySQL 做更少的事情,减轻 MySQL 的压力
  4. 经常查询的字段,创建合适的索引,提高查询效率
  • 什么是 MySQL 慢查询?又该如何优化?

MySQL 中查询超过指定时间的语句,被称之为「慢查询」。该如何优化呢?优化 SQL 语句,创建合适的索引,如以上两个问题。

  • MySQL 分库分表怎么设计
  1. 垂直分表

垂直分表在日常开发和设计中比较常见,通俗的说法叫做“大表拆小表”,某个表中的字段比较多,可以新建立一张“扩展表”,将不经常使用或者长度较大的字段,拆分出去放到“扩展表”中。

  1. 垂直分库

基本的思路就是按照业务模块来划分出不同的数据库,而不是像早期一样将所有的数据表都放到同一个数据库中。

  1. 水平分表

水平分表也称为横向分表,比较容易理解,就是将表中不同的数据行按照一定规律分布到不同的数据库表中(这些表保存在同一个数据库中),这样来降低单表数据量,优化查询性能。

  1. 水平分库分表

水平分库分表与上面讲到的水平分表的思想相同,唯一不同的就是将这些拆分出来的表保存在不同的数据库中。

  • 什么是 MySQL 死锁?如何有效降低死锁?

死锁:死锁一般是事务相互等待对方资源,最后形成环路,而无法继续运行。

产生死锁的原因:

  1. 系统资源不足;
  2. 进程运行推进的顺序不合适;
  3. 资源分配不当等;

如何有效降低死锁:

  1. 按同一顺序访问资源;
  2. 避免事务中的用户交互;
  3. 保持事务简短并在一个批处理中;
  4. 使用低隔离级别;
  5. 使用绑定连接;

扩展阅读

谦虚、自律、胸有成竹、不露城府

本帖由系统于 8个月前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 6

没讲到分区呢

7个月前

@mingyun 欢迎提交 PR :smiley:

7个月前

这个必须支持

6个月前
等车的猪

大佬 牛逼

6个月前
Athena

Good

5个月前

应该再来一些主从配置:smiley:

5个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!