全栈工程师成神之路--Mysql

@wanqiuz 2018-07-10 16:53:26发表于 wanqiuz/blog-articles 全栈工程师成神之路

⭐️ 主键、外键和索引的区别?

定义:

  • 主键--唯一标识一条记录,不能有重复的,不允许为空
  • 外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值
  • 索引--该字段没有重复值,但可以有一个空值

作用:

  • 主键--用来保证数据完整性
  • 外键--用来和其他表建立联系用的
  • 索引--是提高查询排序的速度

个数:

  • 主键--主键只能有一个
  • 外键--一个表可以有多个外键
  • 索引--一个表可以有多个唯一索引

⭐️ char和varchar的区别?

  • CHAR的长度是固定的,而VARCHAR的长度是可以变化的。
  • CHAR(10)若输入数据的字符数小于固定值,则系统自动在其后添加空格来填满设定好的空间。若输入的数据过长,将会截掉其超出部分。VARCHAR数据类型的存储长度为实际数值长度。
  • CHAR的效率比VARCHAR2的效率稍高。

⭐️ Mysql 的存储引擎MyISAM和Innodb的区别

存储引擎是基于表的,而不是数据库。

  • MyISAM 是非事务的存储引擎;适合用于频繁查询的应用;表锁,不会出现死锁;适合小数据,小并发
  • Innodb是支持事务的存储引擎;合于插入和更新操作比较多的应用;设计合理的话是行锁(最大区别就在锁的级别上);适合大数据,大并发。

⭐️ 如何进行SQL优化?

  • 使用合适的存储引擎
  • 合理的事务隔离级别
  • 索引的优化
  • SQL语句优化:1.避免从数据库中读出不需要的字段 2.使用连接(JOIN)来代替子查询(Sub-Queries)
  • 字段的优化:1.使用更小长度的类型 2.使用固定长度的字段 3.使用NOT NULL 4.使用 ENUM 而不是 VARCHAR

⭐️ 如何设计一个高并发的系统

  • 数据库的优化
  • 使用缓存
  • 分布式数据库、分布式缓存
  • 服务器的负载均衡