数据库的优化

数据库优化分为sql优化以及表结构的优化


sql优化---

sql优化说白了就是尽量地避免全表扫描

* 建立索引(优先考虑在 where 以及 orderby 涉及的字段建立索引)

* 用已知字段来代替* (不需要的字段就不必查询)

* 尽量不使用子查询,如果有需要用连接来代替

* 尽量避免在where条件中使用 <=   >=   not in   is null   or  (exists 以及 in的区别)


表结构的优化---

* 选择合理的存储引擎(InnoDB和MyISAM)

* 选择合适的字段属性,尽量减少定义段的长度

* 分库分表


知识补充---


慢查询

* 查询的时间超过0.1s的数据为慢SQL


InnoDB和MyISAM区别---

* InnoDB:支持外键、支持事务、支持”行锁”,但是效率比MyISAM慢。

* MyISAM:适合大量查询(多查少写)的应用、支持”表锁”、效率高。


行锁和表锁---

* 如果有两个 sql 要同时修改同一个表的同一条数据,mysql对于这种情况的处理是一种是表锁定(MyISAM存储引擎),一个是行锁定(InnoDB存储引擎)

* 表锁定表示其他操作都不能对这张表进行操作,必须等当前对表的操作完才行。行锁定也一样,区别就是去行的操作


分库分表---

* 分库:一个系统的多张表,存储到多个的数据库

* 分表:对于一张多行(记录)多列(字段)的二维数据表(水平拆分以及垂直拆分)

* 分表分库会带来着多中问题,例如分布式事务问题,一般没个百万数据都不会分表分库的

* 在生产的过程中,演变的过程是分区->分表->分库(垂直分库 - 水平分库 - 读写分离)


水平拆分和垂直拆分---

* 垂直分表:不同的表存储不同的字段,把字段拆分到不同的表,最常见的product(商品信息表)以及product_content(商品详情)

* 水平分表(最复杂): 横向切分,按照特定分片算法,不同分表存储不同的记录。(即拆分为多个数据结构完全相同的表,orders = order_01 + order_02 + ... )【复杂点在于切分的规则】


索引的建立---

* 主键以及外键建立索引

* 经常出现在where的字段(淘宝的分类还有搜索)

* 经常与其他表进行连接的表,在连接字段上应该建立索引

你可能感兴趣的:(数据库的优化)