【mysql】相关

【mysql-索引】

  21.6.12【索引的分类】
    单列索引:索引加在一个列上
        普通索引(normal):
            alter table user add index `name`(`name`)
        唯一索引(unique):
            alter table user add unique index `code`(`code`);
        主键索引(primary):
            alter table user add primary key(`code`);
    组合索引():
            alter table user add index `id_name`(`id`,`name`);
    全文索引(fulltext):
        alter table user add fulltext index `code`(`code`);
    空间索引(spatial):
    
  21.6.12【索引的规则和使用】
    哪些字段适合加索引:
        【适合】
            1.与其他表进行连接时,连接的字段应该建立索引
            2.经常出现where中的字段,应该建立索引
        【不适合】
            1.频繁数据更改的表,不适合建立太多索引
            2.索引应该建立在小字段上,大文本字段不适建立索引
            
    不使用索引的情况:        
        1.若mysql估计扫全表比用索引更慢,则不用索引
        2.or的前后没有同时使用索引,则不用索引
        3.like 以%开始的,则不用索引
        4.字段参与计算、函数的,则不用索引
        5.隐式转换的则不用索引
        6.不等于的字段不参与索引
        7.复核字段不遵循最左原则的不用索引
     

  1.同一个表不过度使用索引,10个字段有9个字段都加上了索引

  2.聚簇索引(聚集索引):数据表存于B+树内,叶子节点存行记录数据,一般将自增ID作为聚簇索引

  3.InnoDB是基于索引来完成行锁,若sql中没有索引,则会产生表锁;

  4.select  * from member where id=2 for update;  这就是读锁,也是行级锁,若id没有索引,则会锁member表

  5.死锁是:多个事务再同一个资源上相互占用,请求锁定对方的资源

   6.如何避免死锁:

    1)同一个事务,尽可能一次锁定所需要的资源

               2)对于易发生死锁的业务部分,可以采用表锁,再执行事务前检查是否锁了

                3)使用乐观锁,

     7.不用此表了用drop table   只清空数据不删表用truncate

     8.count(*) 要比count(列名)更优
    explain 详解:
    
        id:选择标识符
        select_type:表示查询的类型。
        table:输出结果集的表
        partitions:匹配的分区
        type:表示表的连接类型
        possible_keys:表示查询时,可能使用的索引
        key:表示实际使用的索引
        key_len:索引字段的长度
        ref:列与索引的比较
        rows:扫描出的行数(估算的行数)
        filtered:按表条件过滤的行百分比
        Extra:执行情况的描述和说明

 

 

【优化mysql的思路】
【创建数据表阶段】
  1.字段not null设置,数据库不用比较null值
  2.允许数据表冗余部分字段,减少join表的数量
  3.添加查询索引
【再查询数据阶段】
  1.使用join代替子查询
  2.使用union代替临时表
  3.少用like和通配符
  4.explain下sql语句细致分析
【在架构阶段】
  1.历史数据迁移至历史表,减少目标表的数据量
  2.更换快速查询数据库(ck、es)

【锁】

  乐观锁:操作数据的时候非常乐观,认为别人不会更改数据,只要在执行更新的时候判断以下即可,若是别人更改数据,则停止执行

  悲观锁:操作数据的时候非常悲观,认为别人会更改数据,所以在一开始就锁住数据,等操作完了再释放锁

   读锁:也叫共享锁     select * from member where id=1 for update;

   写锁:也叫排他锁    

【事务】

   特性:

  原子性:要么执行,要么不执行

  一致性:事务内一至

  隔离性:每个事务之间数据隔开

  持久性:一旦提交,数据会永久写入磁盘

【隔离级别】

       1.读取未提交:读取还未提交事务的数据,脏读

      2.读取已提交:读取已经提交的数据,我还未提交,别人已经变更了数据   --不可重复、幻读

      1)多个事务读取同一个事务,A事务修改数据,B事务也修改该数据 叫不可重复读的问题

      3. 可重复读:对同一字段多次读取的结果都是一致的,除非本身事务修改,可以避免脏读和不可重复读,但是可能造成幻读

       4.串行化:最高的隔离级别,完全服从ACID的隔离级别,所有的事务依次执行,可以避免脏读、不可重复读、幻读

【binlog的录入格式】

  statement:

  row:

   mixed:                     
       

posted @ 2021-06-12 16:02  向前-527  阅读(45)  评论(0)    收藏  举报