面试官:上一期博客问了你MySQL主从复制,现在考考你高级特性吧
面试官:不用慌尽管说,错了也没关系😊。。。
每日分享大厂面试演练,本期是《MySQL系列》,感兴趣就关注我吧❤️
面试官:你先说说知道哪些MySQL的高级特性吧
嗯嗯好的。
我了解到的主要有:分区表、视图、存储过程、触发器、事件...这些。
面试官思考中…
面试官:你挑一个讲一讲你对他的理解
ok,那我讲讲分区表吧。
分区的一个主要目的是将数据按照一个较粗的粒度分在不同的区域,这样的话就有很多好处。
- 在执行查询的时候,优化器会根据分区定义过滤不需要查询的分区,这样的话就不需要扫描所有数据
- 可以把数据分布在不同的物理设备上,高效利用多个硬件设备
面试官思考中…
面试官:那分区表是银弹?不会有什么问题吗
它也有很多不足的,像这些:
- 分区表是根据列进行分区的话,查询那些和分区列无关的数据,需要扫描所有分区表
- 分区列和SQL的索引列不匹配,也需要扫描所有分区表
- 当对分区表增删改查时,MySQL需要打开并锁住所有的底层表,这是分区表的另一个开销
CREATE TABLE sales (
order_date DATETIME NOT NULL,
-- Other columns omitted
) ENGINE=InnODB PARTITION BY RANGE(YEAR(order_date)) (
PARTITION P2010 VALUES LESS THAN(2010),
PARTITION P2011 VALUES LESS THAN(2011),
PARTITION P2012 VALUES LESS THAN(2012),
PARTITION pCatchall VALUES LESS THAN MAXVALUE);
面试官思考中…
面试官:视图你也讲一下
Ok,视图本身是一个虚拟表不存放数据,其实就相当于保存了一条Select语句,把这条Select语句封装成视图。
我举个例子吧。在业务开发中,如果不得不改变MySQL表名,而不想改动代码的表名。可以用视图查询新表名的内容,然后把视图命名为旧表名,这样查询视图也能查询出数据。
CREATE VIEW 新表名 AS
SELECT * FROM 旧表名
面试官思考中…
面试官:剩下还有那两个什么什么,你也讲一讲
嗯嗯好的,最后三个是存储过程、触发器和事件。
存储过程其实就是在MySQL里写方法函数
例如可以让MySQL执行函数来插入1万条数据
触发器可以让你在SQL语句操作表数据的时候,在SQL语句执行前、执行后触发一些特定操作
例如可以编写触发器,在插入A表数据时,给日志记录B表插入一条日志
事件类似于Linux的定时任务,可以是在某个时候、每隔一个时间间隔执行一段SQL代码。
例如可以创建一个事件每隔一段时间调用下我们定义的一个存储过程
大概是这些。
面试官思考中…
面试官:有没听说过全文索引
有的,其实类似于ElasticSearch的全文索引。
主要是针对文本内容这种格式的数据,MySQL全文索引会对字段进行分词处理,返回匹配相关的文本内容。
面试官抓抓脑袋,继续看你的简历......
得想想考点你不懂的😰
未完待续。。。。。。
好了,今天的分享就先到这,我们下期大厂面试演练继续。
创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️