热线电话:13121318867

登录
2022-04-27 阅读量: 509
MySQL数据库-基础知识(下)

11.varchar和char的区别?

  • char的长度是不可变的,而varchar的长度是可变的。

  • char的存取速度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找。

  • char的存储方式是:对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节。varchar的存储方式是:对每个英文字符占用2个字节,汉字也占用2个字节。

12.说说like % - 的区别

  • %百分号通配符:表示任何字符出现任意次数(可以是0次)

  • 下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符.

  • like操作符: LIKE作用是指示mysql后面的搜索模式是利用通配符而不是直接相等匹配进行比较.

13.索引、索引的作用和索引的优缺点是什么,什么样的字段适合建索引?

数据库索引,是数据库管理系统中一个排序的数据结构,索引的实现通常使用B树及其变种B+树。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。

索引的作用:协助快速查询、更新数据库表中数据。

索引的优点:

  • 索引可以保证数据每一行的唯一性

  • 加快数据的检索速度

缺点:

  • 创建和维护索引需要时间

  • 索引需要占用物理空间,增加空间成本

  • 对数据进行增、删、改的时候需要动态维护

唯一的,不为空的,经常被查询的字段适合建立索引

14.B+树的索引和Hash索引的区别?

hash索引是键值对的索引,检索效率非常高

B+树索引需要从根节点到枝节点索引,最后才能访问到数据

为什么不都用Hash索引而使用B+树索引?

Hash索引仅仅能满足"=","IN"和""查询,不能使用范围查询,hash是索引也不能用来做排序操作,hash的索引不能利用部分索引键查询。

15.B树和B+树的区别,为什么MySQL会用B+树?

B树,每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为nul,叶子结点不包含任何关键字信息。

B+树,所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大的顺序链接,所有的非终端结点可以看成是索引部分,结点中仅含有其子树根结点中最大(或最小)关键字。

为什么MySQL用B+树呢?

  • B+ 树查询效率更稳定(因为因为B+ 树每次只有访问到叶子节点才能找到对应的数据 而在 B 树中 非叶子节点也会存储数据)

  • B+ 树的查询效率更高 (因为通常B+ 树比 B 树更矮胖 阶数更大 深度更低 查询所需要的磁盘 I/O 也会更少 。 同样的磁盘页大小 B+ 树可以存储更多的节点关键字)

  • 对索引进行范围查询时 B+ 树效率也更高(因为所有关键字都出现在B+ 树的叶子节点中 并通过有序链表进行了链接 。 而在 B 树中则需要通过中序遍历才能完成范围查找 效率要低很多)

16.Mysql中有哪几种锁?

  • 行级锁:锁定力度小,发生锁冲突概率低,实现并发度高,开销大,加锁慢,并发度高

  • 页级锁:加锁时间比行锁长,页级锁开销介于表锁和行锁之间,会出现死锁,并发度一般

  • 表级锁:开销小,加锁快

17.Mysql中默认事务隔离级别是?

  • 读未提交(RU): 一个事务还没提交时, 它做的变更就能被别的事务看到.

  • 读提交(RC): 一个事务提交之后, 它做的变更才会被其他事务看到.

  • 可重复读(RR): 一个事务执行过程中看到的数据, 总是跟这个事务在启动时看到的数据是一致的. 当然在可重复读隔离级别下, 未提交变更对其他事务也是不可见的.

  • 串行化(S): 对于同一行记录, 读写都会加锁. 当出现读写锁冲突的时候, 后访问的事务必须等前一个事务执行完成才能继续执行.

18.Mysql数据库表类型有哪些?

MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等。

MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。

InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。

19.简述mysql的MVCC机制

MVCC是一种多版本并发控制机制,是MySQL的InnoDB存储引擎实现隔离级别的一种具体方式,用于实现提交读和可重复读这两种隔离级别。MVCC是通过保存数据在某个时间点的快照来实现该机制,其在每行记录后面保存两个隐藏的列,分别保存这个行的创建版本号和删除版本号,然后Innodb的MVCC使用到的快照存储在Undo日志中,该日志通过回滚指针把一个数据行所有快照连接起来。

20.简述MySQL 常见的两种存储引擎:MyISAM与InnoDB的理解的理解

目前MySQL默认的存储引擎是InnoDB

现在大多数时候我们使用的都是InnoDB存储引擎,但是在某些情况下使用MyISAM更好,比如:MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。 在数据库做主从分离的情况下,经常选择MyISAM作为主库的存储引擎

二者的常见对比

  • count运算上的区别: 因为MyISAM缓存有表meta-data(行数等),因此在做COUNT(*)时对于一个结构很好的查询是不需要消耗多少资源的。而对于InnoDB来说,则没有这种缓存。

  • 是否支持事务和崩溃后的安全恢复: MyISAM 强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。但是InnoDB 提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

  • 是否支持外键: MyISAM不支持,而InnoDB支持。


29.1134
0
关注作者
收藏
评论(0)

发表评论

暂无数据