Mysql 笔记

myisam 和 innodb 区别
  • innodb支持行锁,开销大,能解决脏读和不可重复读问题,myisam锁粒度为表锁
  • innodb有事务日志,可以根据日志文件恢复
  • innodb支持外键,
  • MyISAM支持全文索引,InnoDB在MySQL 5.6及以上版本也开始支持全文索引。
  • 对于读操作,MyISAM可能更快;对于写操作,尤其是并发写操作,InnoDB通常性能更好
Mysql 索引类型
  • 主键索引:不允许重复,不为null,一个表只能有一个
  • 唯一索引:不允许重复,可以为null,一个表可以有多个
  • 普通索引:基本的索引类型,没有唯一性的限制,允许为 NULL 值
  • 全文索引:
mysql 锁
  • 共享锁:读锁,多个线程可以同时读,但只能有一个线程写
  • 排他锁:写锁,只能有一个线程写,其他线程不能读或写
  • 表锁
  • 行锁
  • 间隙锁
事务隔离级别
  • 读未提交:读未提交,读到脏数据,可能读到其他事务未提交的数据
  • 读已提交:读已提交,读到已提交的数据,但是可能读到其他事务未提交的数据
  • 串行化:串行化,读到已提交的数据,并且不能读到其他事务未提交的数据
  • 可重复读:可重复读,读到已提交的数据,并且不能读到其他事务未提交的数据
创建索引需要注意
  • 最好用not null
  • 离散度较大的列
  • 常用于where查询条件的字段
  • 索引字段值越小越好
SQL优化经验
  • 尽量不要使用select *
  • 尽量不要使用order by
  • 尽量不要使用group by
  • 尽量不要使用distinct
  • where 条件不要使用函数
  • explain查看执行计划
  • 表尽量使用自增主键
  • 尽量不使用not in ,!=符号
  • 查询字段创建索引
  • 大表分表
  • 注意使用最左原则
  • 避免使用大事务
  • 字段尽量not null
  • 选择合适字段类型

results matching ""

    No results matching ""