数据库优化分为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的字段(淘宝的分类还有搜索)
* 经常与其他表进行连接的表,在连接字段上应该建立索引