mysql 题目

数据库

  1、Innodb 和 MySlam 区别

    Innodb

      支持行级锁

      支持事务

      支持外键

      索引组织表 使用的聚簇索引、索引就是数据,顺序存储,因此能缓存索引,也能缓存数据

    Mylsam 

      支持表级锁定

      使用的是非聚簇索引、索引和文件分开,随机存储,只能缓存索引

      没事务支持(不支持)

 

mysql语句

  1、union 和 union All 区别

    union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

    union All:对两个结果集进行并集操作,包括重复行,不进行排序;

 

索引

  1、主键索引入和非主键索引区别

    主键索引是聚簇索

    非主键索引是二级索引

      非主键的索引,先搜索非主键的索引树,获取到对应的主键,通过主键搜索主键索引

    https://www.cnblogs.com/heishuichenzhou/p/10813463.html

  2、自增id 和 uuid 为主键分别是什么索引,区别

    自增 id 是

       Innodb的b+树索引 https://blog.csdn.net/qq_29611427/article/details/105122532

    32位UUID的索引

      使用uuid,并不能利用mysql的索引

      数据生成没有规律,无法做到按顺序存储;

      写入的目标页很可能已经刷新到磁盘上并且从缓存上移除,或者还没有被加载到缓存中,在插入之前存储引擎不得不先找到并从磁盘读取目标页到内存中,这将导致大量的随机IO;

      因为写入是乱序的,存储引擎不得不频繁的做页分裂操作,以便为新的行分配空间,页分裂导致移动大量的数据,一次插入最少需要修改三个页以上;

      由于频繁的页分裂,页会变得稀疏并被不规则的填充,最终会导致数据会有碎片1

  3、索引的缺点    

    (1)  引要占用磁盘空间。通常情况下,这个问题不是很突出。

      但是,如果你创建每一种可能列组合的索引,索引文件体积的增长速度将远远超过数据文件。

      如果你有一个很大的表,索引文件的大小可能达到操作系统允许的最大文件限制。

    (2)   对于需要写入数据的操作,比如DELETE、UPDATE以及INSERT操作,索引会降低它们的速度。

      这是因为MySQL不仅要把改动数据写入数据文件,而且它还要把这些改动写入索引文件。

    

查询

  1、in 是否走索引

    in通常是走索引的,当in后面的数据在数据表中超过30%(上面的例子的匹配数据大约6000/16000 = 37.5%)的匹配时,会走全表扫描,即不走索引,因此in走不走索引和后面的数据有关系。

    当in()种的数据很大时,不走索引  

    当查询的列是char类型没有加引号,mysql优化器会自动给填充引号,同时也会导致索引失效

    当in()中存在子查询、格式化函数等同样也会使索引失效!

    https://blog.csdn.net/kevinxxw/article/details/109567275

 

事务

  1、mysql 如何避免幻读

    https://zhuanlan.zhihu.com/p/198021057

    多版本并发控制(MVCC,快照读)

    next-key锁(当前读)

    (RR模式下默认就是MVCC+next-key locks)

    1 使用串行化读的隔离级别

    2 MVCC+next-key locks:next-key locks由record locks(索引加锁) 和 gap locks(间隙锁,每次锁住的不光是需要使用的数据,还会锁住这些数据附近的数据)

    想什么呢...RR模式下默认就是MVCC+next-key locks......
    严格来说RR已经解决幻读了,你第二个例子或许叫“幻写”_

    这个很清楚 : https://blog.csdn.net/u013067756/article/details/90722490

 

sql 修改表

   1、添加索引(已经存在的表)应用于表创建完毕之后再添加。

    ALTER TABLE 表名 ADD 索引类型 (unique,primary key,fulltext,index)[索引名](字段名)

    //普通索引

    alter table table_name add index index_name (column_list) ;

    //唯一索引

    alter table table_name add unique (column_list) ;

    //主键索引

    alter table table_name add primary key (column_list)
    ————————————————
    版权声明:本文为CSDN博主「江心月Tel」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_32484447/article/details/113199493

posted @ 2021-10-15 14:21  抽象Java  阅读(46)  评论(0编辑  收藏  举报