mysql

一 mysql的逻辑分层

  连接层:提供与客户端连接的服务

  服务层:提供各种用户使用的接口(比如增删改查),提供sql优化器

  引擎层:提供各种数据存储的方式(innodb, myisam)

innodb(默认): 事务优先(防止并发操作造成的错误或者混乱,所以适合高并发操作;支持行锁)
myisam:性能优先,处理快,效率高(支持表锁)

  存储层:存储数据

二 sql优化

  原因:性能低,执行时间太长,等待时间太长,sql语句欠佳(跨表查询,子查询之类),索引失效,服务器参数设置不合理(缓冲区,线程数等)

  sql优化,就是要优化索引,索引相当于书的目录,帮助mysql高效获取数据的数据结构,从这句话我们可以得出就是索引是数据结构。

  索引的弊端:

弊端:
1. 索引本身很大,可以存放在内存/硬盘(通常为硬盘)
2. 索引不是所有情况均使用:1少量情况(比如1个字段或者两个字段,这个时候就没有必要建索引)2.频繁更新的字段 3.很少使用的字段
3. 索引会降低增删改的效率(降低增删改,提高查询速率)

  索引的优势:

1. 提高查询效率(实际上是降低IO使用率)
2. 降低CPU的使用率(比如一张表中我们查询的是年龄,mysql用的是b树,b树约定俗称的都是左小右大,假如没有索引的话,就会先把这张表拿出来重新排下序,b树是已经按索引拍好序的,所以在这里就降低了CPU的使用率)

  三层b树可以上百万条数据,b树一般都是指b+,数据全部都存放在叶节点中,所以b+树中查询任意的数据次数为n次(b+树的高度)

三 索引

  分类:单值索引,给单列加索引,比如给age加一个索引;一个表有多个单值索引

        主键索引:不能重复,不能是null

     唯一索引:不能重复,比如一张表中的id值,可以是null

        复合索引:多个列构成的索引(相当于 二级目录)

  创建索引:

        create 索引类型 索引名 on 表(字段)

      单值:create index dept_index on tb(name);

      唯一:create unique index name_index on tb(name);

      复合:create index dept_name_index on tb(dept,name);

  注意:如果一个字段是primary key ,则该字段默认就是主键索引

  删除索引:drop index 索引名 on 表名;

  查看索引:show index from 表名

四 避免索引失效的一些原则

  (1)复合索引

    a.复合索引不要跨列或无序使用(最佳左前缀)(a,b,c)

    b.复合索引,尽量使用全索引匹配(a,b,c)

  (2)不要在索引上进行任何操作(对索引进行加减乘除,函数的运算,类型的转换),否则索引失效

五 锁机制:解决因资源共享而造成的并发问题

   写锁:若果当前操作没有完毕(买衣服的一系列操作),则无法进行其他的读锁,写锁

       操作范围:a.表锁。一次性对一张表整体加锁,myisam存储引擎使用表锁,开销小,加锁快,无死锁,并发度低。

           b.行锁。一次性对一条数据加锁,innodb存储引擎使用的是行锁,与表锁相反。

六 主从复制

   主数据库将改变的数据存储在二进制日志文件,从数据库中的io线程读取主数据库中的数据存储在广播日志文件中,从数据库中的sql线程将广播日志中的数据写入database中

生前无需久睡,死后自会长眠,努力解决生活中遇到的各种问题,不畏将来,勇敢面对,加油,你是最胖的,哈哈哈
原文地址:https://www.cnblogs.com/panshao51km-cn/p/11970800.html