MySQL面试题(每日背诵版day04)

1、MySQL内部结构

大体上分为server层和存储引擎两部分

server层包括连接器、查询缓存、分析器、优化器、执行器

存储引擎层:存储引擎负责数据的存储和提取

连接器:连机器是建立和客户端的连接、获取权限、维持和管理连接。

查询缓存:连接建立完成后,你就可以执行select语句了,此时会先进行查询缓存

分析器:

语法分析:MySQL需要识别里面字符串是什么,代表什么

语法分析:根据语法分析结果,语法分析器会根据语法规则判断你这个sql语句是否满足 mysql的语法

优化器:优化器是在表里面有多个索引时决定使用那个索引,或者在一个语句有多表关联时决定各个表之间的连接顺序

执行器:调用存储引擎接口,执行sql语句,得到结果

2、数据库引擎有哪些

innoDB、mySam、BDB、MEMORY、CSV

其中innoDB、BDB提供安全事务

3、什么是索引

索引是可以帮助mysql高效获取数据的一种数据结构,数据库系统还维护满足特定查找算法的数据结构,这些数据结构就是以某种方式指向数据,这样可以在数据结构上实现高级查找算法,这种结构就是索引

4、如何创建索引

方式一:在建表的时候创建

-- 语法结构

CREATE TABLE 表名( 属性名 数据类型[完整性约束条件],

属性名 数据类型[完整性约束条件],

......

属性名 数据类型

[ UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY

[ 别名] ( 属性名1 [(长度)] [ ASC | DESC] )

);

方式二:使用create index语句创建索引

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name

[USING index_type]

ON tbl_name(index_col_name,...) // 如果指定的列的名称是多个,那么这个索引我们将其称之为复合索引

5、创建索引约束有哪些

唯一索引:UNIQUE

全文索引:FULLTEXT

空间索引:SPATIAL

普通索引

6、常见索引类型有哪些

mysql目前提供了4种引擎

BTTRR索引:最常见 索引,大部分索引都支持b树索引

HASH索引:只有memory引擎支持

R-TREE索引:特殊的地理空间数据类型,使用较少

FULL-TEXT:一个特殊的索引类型

7 、索引优缺点

优点:

提高数据库检索的效率,降低数据库IO成本

通过索引序列对数据进行排序,降低数据库排序的成本,降低CPU消耗

缺点:

虽然索引大大提高了查询速度,同时会降低更新标的速度,对表进行增删改操作时,因为更新表 mysql不仅要存储数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的的键值变化后的索引信息

实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是占用空间的

8、MySQL查询慢的原因

查询没有命中索引

load了不需要的数据列

数据量太大

9、如何进行SQL优化

SQL语句中in值不应该过多

MySQL对in做了优化,会将所有的常量存储在一个排序好的数组里,数值较多是产生的消耗是比较大的

select查询语句中务必指明查询字段名称

select*增加了很多不必要的消耗,增加了覆盖索引的可能性

如果排序字段没有用到索引,就尽量少排序

如果限制条件中其他字段没有使用索引,就尽量少使用or

不建议前%模糊查询

%name会使索引失效,从而全表查询

10、什么是事务

多个操作组成一个逻辑单元,组成这个逻辑单元的多个操作,要么都成功,要么都失败

11、ACID是什么

A:原子性,事务的操作要么同时成功要么同时失败,不可能只执行一部分操作

C:一致性,数据库总会从一个状态到另一个状态,不会存在中间态

I:隔离性,通常来说,一个事务在提交前其他事务是不可见的

D:持久性,一旦事务提交,那么状态就不会改变

12、并发事务带来的问题

脏读:当一个事务正在访问一个数据并对其进行了修改,而这个数据还没被提交,此时有另一个事务来访问了该数据,使用这个脏数据,因为这个数据是没有提交的,所以用这个数据操作可能是不正确的

丢失数据:只一个事务读取数据时,另一个事务也访问了该数据,在第一个事务修改了 该数据后,第二个事务也修改了这个数据,这样会造成第一个事务修改的数据丢失

不可重复读:再一次事务中多次读取同一个数据,在这个读取还没结束时 ,这时第二个事务访问并修改了该数据,那么在这两次数据读取就不一致,就称为不可重复读

幻读:在一个事务在读取数据时,事务二又插入了一些数据,在数据随后的查询中,就多出了一些不存在的数据,就是幻读

13、怎么解决这些问题

对事务进行隔离

未提交读:在这个隔离级别下,其他事务会看到本事务部分未提交的修改,会造成脏读,不可重复读,幻读

已提交读:在这个隔离级别下,其他事务会看到本事务提交的部分,会有不可重复读,幻读的问题

可重复读:这是默认的隔离级别,解决了不可重复读的问题,但是会存再幻读的问题

可串行化:最高的隔离级别,解决了所有的问题,他会将所有操作串行化,导致并发性能急剧下降

14、MySQL有几种锁

按数据粒度分:

表锁:操作时会锁定整个表

行锁:操作时会锁定操作行

页面锁:会锁定一部分数据

按数据操作类型分:

读锁:针对同一份数据,多个读操作可以同时进行不会互相影响

写锁:当前操作没有完成前,会阻断其他写锁和读锁

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值