Java面试复习专题(MySQL)

目录

一、数据库引擎有哪些

二、唯一索引比普通索引快么,为什么?

三、InnoDB与MyIsam的区别

四、如何选择存储引擎

事务

备份

崩溃恢复

不要混合使用存储引擎

五、Mysql一天五万条以上的增量,预计运维三年,如何优化

六、说一说对mysql索引的理解

七、如何创建索引

八、常见的索引类型有哪些


一、数据库引擎有哪些

数据库引擎用于存储、处理保护数据的核心服务,利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数的需要处理大量数据的应用程序的要求。

1、InnoDB引擎(发音in-no-db

支持行级锁、支持事务处理,支持外键,支持崩溃修复能力和并发控制,支持mvcc,如果对事物的完整性要求比较高,要求实现并发控制,那选择innodb有很大的优势。如果需要频繁的更新、删除数据库,可以选择innodb,因为它支持事务的提交和回滚。

2、MYISAM引擎(发音my-z[ei]m

和innodb相比,只支持表级锁,其他都不支持,插入数据快,空间和内存的使用比较低,如果表主要用于插入新记录和读出记录,那么选择MYLSAM能实现高效率,如果应用的完整性、并发性比较低,也可以使用。

3、ISAM引擎

isam是一个定义明确且经过时间考验的数据表格管理方式,他在设计之时就考虑到数据库被查询的次数远大于更新的数据,因此ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源,ISAM两个不足之处在于他不支持事务处理,也不能够容错,如果硬盘崩掉了,那么数据文件就无法恢复了。可以连续地按照进入的顺序或者任意地根据索引记录任何访问。

4、MEMORY存储引擎

MEMORY存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问。它可以每个表中有多达32个索引,MEMORY表使用一个固定的记录长度格式,在所有客户端之间共享。

二、唯一索引比普通索引快么,为什么?

普通索引(INDEX):最基本的索引,没有任何限制
唯一索引(UNIQUE):与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值

唯一索引不一定比普通索引快,还可能慢

查询时,在未使用limit的情况下,在匹配一条数据后,唯一索引立即返回,普通索引会继续匹配下一条数据,发现不匹配后返回,如此看来唯一索引少了一次匹配,但实际上这个消耗微乎其微,更新时,这个情况就复杂了,普通索引将记录放到change buffer中语句就执行完毕了,而对唯一索引来说,必须验证唯一性,因此,必须将数据页读入内存确定没有冲突,然后才能继续操作,对于写多读少的情况,普通索引利用change buffer有效减少了对磁盘的访问次数,因此,普通索引要高于唯一索引。

三、InnoDB与MyIsam的区别

1、innodb支持事务,而myisam不支持事务

2、innodb支持外键,而myisam不支持外键

3、innodb默认表锁,使用索引检索条件是行锁,而myisam是表锁

4、innodb的索引都是通过b+树,具体实现却不一样,innodb的b+树的叶子节点是存放数据的,myisam是用于存放指针的,

5、innodb是聚簇索引,必须要有主键,myisam是非聚簇索引

6、mysql默认使用的是innodb,如果要用事务和外键就用innodb,如果这张表只用来查询可以用myisam,如果更新删除增加频繁就使用innodb。

四、如何选择存储引擎

在大多数上,选择innodb都是正确的,除非使用到一些innodb没有的特性,可以根据几方面来选择存储引擎

事务

首先要判断是否要用到事务,如果要用到事务,那么innodb是目前最稳定的,并且通过验证的支持事务的存储引擎,如果不使用事务,主要进行一些读取和插入操作,那么mylsam可以使用,如果表中的数据只会用到insert,连select操作都很少的话,也可以选择Archieve引擎

备份

 如果可以定期的关闭服务器进行备份的话,那么备份因素可以忽略。但是在生产环境中,数据库服务器一般是不能进行关闭的,那么我们一般就选择可以在线热备的存储引擎。在前面所说的存储引擎中,只有Innodb有免费的在线热备方案。

崩溃恢复

当数据量较大的时候,系统崩溃如何能快速进行恢复,也是一个需要考虑的问题,myisam崩溃后发生损坏要比innodb高很多,而且恢复的速度也要慢很多,很多时候,即使不需要事务支持,也要选择innodb引擎。

不要混合使用存储引擎

在选择存储引擎这个问题上,还有一点需要注意的是,除非万不得已,否则不要混合使用多种存储引擎。

五、Mysql一天五万条以上的增量,预计运维三年,如何优化

1、设计良好的数据表结构,允许部分数据冗余,减少join的查询,提高效率。

2、选择合适的表字段数据类型和存储引擎,适当的添加索引

3、mysql主从读写分离

4、添加缓存机制

5、找规律分表,减少单表中的数据量提高查询速率

6.书写高效率的sql

六、说一说对mysql索引的理解

索引是帮助MySQL高效获取数据的数据结构

索引非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响就会愈发重要。索引能够轻易将查询性能提高好几个数量级,总的来说就是可以明显的提高查询效率。

七、如何创建索引

-- 创建索引的语法格式
-- alter table 表名 add index 索引名[可选](列名, ..)
-- 给name字段添加索引
alter table classes add index my_name (name);

1、表的主键、外键必须有索引;

2、数据量超过300的表应该有索引;

3、经常与其他表进行连接的表,在连接字段上应该建立索引

4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;

5、索引应该建在选择性高的字段上;

6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

八、常见的索引类型有哪些

从物理结构上分为聚簇索引和非聚簇索引

聚簇索引:指索引的键值的逻辑顺序与表中相应行的物理顺序一致,每张表只能有一个聚簇索引,这就是我们常说的主键索引

非聚簇索引:索引的逻辑顺序与表中数据行的物理顺序不一致

从应用上分可以分为以下几类

普通索引:mysql中的基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了提高效率,通过alert table table_name add index index_name(column);

唯一索引:索引列中的值必须是唯一的,但是允许为空值,alert table table_name add unique index_name(cloumn)

主键索引:特殊的唯一索引,也成聚簇索引,不允许有空值,并由数据库自动帮创建

组合索引:组合表中多个字段创建的索引,遵守最左前缀匹配原则

全文索引:只有在myisam引擎中才能使用,只支持char、varchar、text类型字段上使用

九、怎么看为表定义的所有索引

SHOW INDEX FROM <tablename>;

十、索引的优缺点

优点:1、创建索引可以大幅提高系统性能,帮助用户提高查询的速度

2、通过索引的唯一性,保证数据库表中每一行数据的唯一性

3、可以加速表与表之间的连接

4、降低查询中分组和排序的时间

缺点:1、索引的存储需要浪费磁盘空间

2、当数据的量非常大时,索引的创建和维护的时间是非常大的

3、当每次执行创建数据库操作时,索引也需要动态的维护,降低了数据的维护速度

十一、什么情况下设置了索引但无法使用

1、对列进行计算或者使用函数,则该列的索引会失效

2、不匹配数据类型,会造成索引失效

3、where语句中使用了IS NULL或者IS NOT NULL,会造成索引失效

4、使用了反向操作,该索引将不起作用

5、使用了link操作,索引就将不起作用

6、在WHERE中使用OR时,有一个列没有索引,那么其它列的索引将不起作用

十二、建立索引的时候,有哪些需要考虑的因素

1、数据量超过三百,理论上应该创建索引

2、经常与其他表链接的表,在链接字段应创建索引,on两边的字段都要创建索引

3、.经常出现在where子句中的字段,尤其是大表,应创建索引

4、索引应创建在选择性高,重复度低的字段上,如员工表,姓名和性别都作为查询条件,姓名更适合建立索引。如果两个同时建立了索引,MySQL也会自动选择以姓名作为索引查询

5、索引应该建立在小字段上,对于大的文本甚至超长字段,尽量不建立索引

十三、如何优化sql

1、对查询进行优化,避免进行全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。    

2、应尽量避免where子句对null进行判断,否则将导致引擎放弃使用索引而进行全表扫描

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值