数据库优化

存儲引擎(数据存储形式,锁的粒度,事务,数据的存储特点)

  1. InnoDB是默认的事务型存储引擎, 并且通过一些机制和工具,支持真正的热备份
  2. 锁的粒度 它的锁粒度是行锁
  3. InnoDB表是基于聚簇索引(另一篇博客有介绍)建立的,聚簇索引对主键的查询有很高的性能,
  4. MyISAM不支持事务
  5. 数据的存储特点 MyISAM是基于非聚簇索引进行存储的。
  6. 锁的粒度 MyISAM不支持行锁,所以读取时对表加上共享锁,在写入是对表加上排他锁。由于是对整张表加锁,相比InnoDB,在并发写入时效率很低。
  7. 两种存储引擎各有各的有点,MyISAM专注性能,InnoDB专注事务。两者最大的区别就是InnoDB支持事务,和行锁。 這個是要根據具體的業務來劃分的
    兩者之間需要在用的時候需要 分析用哪個
    如何在两种存储引擎中进行选择?
    ① 是否有事务操作?有,InnoDB。
    ②是否存储并发修改?有,InnoDB。
    ③是否追求快速查询,且数据修改较少?是,MyISAM。
    ④是否使用全文索引?如果不引用第三方框架,可以选择MyISAM,但是可以选用第三方框架和InnDB效率会更高。
  1. 緩存
  2. 分庫分表
  3. 讀寫分離
  4. 主從複製
  5. 備份
  6. 執行計劃
  7. 碎片整理

数据库语句优化的方案

避免全表扫描

首先考虑在 where 以及order by 设计的列上创建索引 避免全表扫描
尽量避免在where 字句中使用!<> 或者<> 操作 否则数据库引擎会全表扫描
尽量避免在where 子句的查询字段上进行null 值得判断 可能引起全表扫描
应该尽量避免使用or连接条件 否则导致引擎放弃使用索引 进行全表扫描
in和not in 谨慎使用 否则也会导致全表扫描 对于连接的数值 使用between 代替 in
尽量避免在where 子句中对字段进行表达式操作
尽量避免在where 子句中对字段使用函数操作
用exist 代替in
尽量使用数字类型
使用具体的列名代替 *
尽量使用变量代替临时表
避免频繁的创建和删除临时表
尽量避免使用游标
尽量避免向客户端返回大数据量
避免大量的事务操作 提高并发能力
LIKE操作符

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