zoukankan      html  css  js  c++  java
  • mysql的常见面试题

    mysql的事务隔离级别

    https://www.cnblogs.com/hello-shf/p/10702316.html

    mysql几种引擎的区别?

    1.常用的3种 

    2.InnoDB Myisam Memory

    3.InnoDB跟Myisam的默认索引是B+tree,Memory的默认索引是hash

    区别:

    1.InnoDB支持事务,支持外键,支持行锁,写入数据时操作快,MySQL5.6版本以上才支持全文索引

    2.Myisam不支持事务。不支持外键,支持表锁,支持全文索引,读取数据快

    3.Memory所有的数据都保留在内存中,不需要进行磁盘的IO所以读取的速度很快, 、

       但是一旦关机的话表的结构会保留但是数据就会丢失,表支持Hash索引,因此查找速度很快

    三、MySQL中常用的几种存储引擎:

    MyISAM存储引擎:

    存放的位置: MySQL如果使用MyISAM存储引擎,数据库文件类型就包括.frm、.MYD、.MYI,默认存放位置是C:Documentsand SettingsAll UsersApplication DataMySQLMySQL Server 5.1data

    存放的方式: MyISAM 这种存储引擎不支持事务,不支持行级锁,只支持并发插入的表锁,主要用于高负载的select。

    索引的方式: MyISAM也是使用B+tree索引但是和Innodb的在具体实现上有些不同。

    该引擎基于ISAM数据库引擎,除了提供ISAM里所没有的索引和字段管理等大量功能,MyISAM还使用一种表格锁定的机制来优化多个并发的读写操作,但是需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间,否则碎片也会随之增加,最终影响数据访问性能。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMChk工具和用来恢复浪费空间的 MyISAMPack工具。MyISAM强调了快速读取操作,主要用于高负载的select,这可能也是MySQL深受Web开发的主要原因:在Web开发中进行的大量数据操作都是读取操作,所以大多数虚拟主机提供商和Internet平台提供商(Internet Presence Provider,IPP)只允许使用MyISAM格式。
    MyISAM类型的表支持三种不同的存储结构:静态型、动态型、压缩型。
    静态型:指定义的表列的大小是固定(即不含有:xblob、xtext、varchar等长度可变的数据类型),这样MySQL就会自动使用静态MyISAM格式。使用静态格式的表的性能比较高,因为在维护和访问以预定格式存储数据时需要的开销很低;但这种高性能是以空间为代价换来的,因为在定义的时候是固定的,所以不管列中的值有多大,都会以最大值为准,占据了整个空间。
    动态型:如果列(即使只有一列)定义为动态的(xblob, xtext, varchar等数据类型),这时MyISAM就自动使用动态型,虽然动态型的表占用了比静态型表较少的空间,但带来了性能的降低,因为如果某个字段的内容发生改变则其位置很可能需要移动,这样就会导致碎片的产生,随着数据变化的增多,碎片也随之增加,数据访问性能会随之降低。
    对于因碎片增加而降低数据访问性这个问题,有两种解决办法:
    a、尽可能使用静态数据类型;
    b、经常使用optimize table table_name语句整理表的碎片,恢复由于表数据的更新和删除导致的空间丢失。如果存储引擎不支持 optimize table table_name则可以转储并 重新加载数据,这样也可以减少碎片;
    压缩型:如果在数据库中创建在整个生命周期内只读的表,则应该使用MyISAM的压缩型表来减少空间的占用。

    优缺点:MyISAM的优势在于占用空间小,处理速度快。缺点是不支持事务的完整性和并发性。

    2.innoDB存储引擎

    存储位置:MySQL如果使用InnoDB存储引擎,数据库文件类型就包括.frm、ibdata1、.ibd,存放位置有两个,.frm文件默认存放位置是C:Documents and SettingsAll UsersApplicationDataMySQLMySQL Server 5.1data,ibdata1、.ibd文件默认存放位置是MySQL安装目录下的data文件夹。

    innodb存储引擎的mysql表提供了事务,回滚以及系统崩溃修复能力和多版本迸发控制的事务的安全。

    innodb支持自增长列(auto_increment),自增长列的值不能为空,如果在使用的时候为空的话怎会进行自动存现有的值开始增值,如果有但是比现在的还大,则就保存这个值。

    innodb存储引擎支持外键(foreign key) ,外键所在的表称为子表而所依赖的表称为父表。

    innodb存储引擎最重要的是支持事务,以及事务相关联功能。

    innodb存储引擎支持mvcc的行级锁。

    innodb存储引擎索引使用的是B+Tree

    优缺点:InnoDB的优势在于提供了良好的事务处理、崩溃修复能力和并发控制。缺点是读写效率较差,占用的数据空间相对较大。

    3.MEMORY存储引擎

    memory存储引擎相比前面的一些存储引擎,有点不一样,其使用存储在内从中的数据来创建表,而且所有的数据也都存储在内存中。

    每个基于memory存储引擎的表实际对应一个磁盘文件,该文件的文件名和表名是相同的,类型为.frm。该文件只存储表的结构,而其数据文件,都是存储在内存中,这样有利于对数据的快速处理,提高整个表的处理能力。

    memory存储引擎默认使用哈希(HASH)索引,其速度比使用B-+Tree型要快,如果读者希望使用B树型,则在创建的时候可以引用。

    memory存储引擎文件数据都存储在内存中,如果mysqld进程发生异常,重启或关闭机器这些数据都会消失。所以memory存储引擎中的表的生命周期很短,一般只使用一次。

    4.ARCHIVE存储引擎

    该存储引擎非常适合存储大量独立的、作为历史记录的数据。区别于InnoDB和MyISAM这两种引擎,ARCHIVE提供了压缩功能,拥有高效的插入速度,但是这种引擎不支持索引,所以查询性能较差一些。

    四.四种存储引擎比较

    InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。

    MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率

    MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果

    如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用Archiv

    注意,同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎。

  • 相关阅读:
    学Python必背的初级单词,你都背了吗?
    零基础Python应该怎样学习呢?(附视频教程)
    初学Python,需要装什么软件?
    Python该怎么入门?Python入门教程(非常详细)
    c语言该怎么入门?C语言入门教程(非常详细)
    零基础学习Python web开发、Python爬虫、Python数据分析,从基础到项目实战!
    零基础学到什么程度可以找一份web前端工作?
    【spring boot】SpringBoot初学(2)
    【spring boot】SpringBoot初学(1)
    【spring】(填坑)sql注入攻击
  • 原文地址:https://www.cnblogs.com/hellohero55/p/13122460.html
Copyright © 2011-2022 走看看