课程中的观点和MySQL文档的介绍似乎有出入?

来源:4-6 设计产品表和商品表(二)

PrimaryFantasty

2019-12-14

课程中的观点–“唯一约束本身自带索引功能,所以一般情况下加了唯一约束的字段就可以不用加索引了,但mysql的索引有HASH和BTree两种,给spg_id加唯一约束和索引,是为了留出修改索引类型的接口,比如说唯一约束是BTree的,而index是Hash的.”;
MySQL官方文档:
https://dev.mysql.com/doc/refman/8.0/en/innodb-introduction.html
文档换成5.7的也一样,InnoDB支持Hash索引,但它的Hash索引是自适应的,用户无法干涉,改了也白搭,会变成BTree类型.
Memory引擎才支持自定义的Hash索引.
所以,这里所谓的"留出扩展接口"的做法不大理解?
目前看到了第九章,没发现有相关解释,扫了一下目录,后边都在讲集群,应该也没有解释这个吧?
请问,后期开发或线上更换数据库引擎的做法可行的吗?
Memory引擎当下在大企业使用流行度怎么样?
<<阿里巴巴Java代码规范>>里面是说必须且只用InnoDB引擎,MySQL也默认是用InnoDB,请问,它们的这个选择倾向是否能说明诸如MyISAM和Memory这些老牌的引擎处在被淘汰的境地?

写回答

1回答

神思者

2019-12-15

首先我跟你说一下更换引擎的业务情况。Memory引擎的特点是数据存储都是临时的,不会做任何持久化。所以项目上线之前,可以用脚本的方式,把业务表改成Memory引擎,但是字典表不用改成Memory引擎。接下来就可以通过Selenium这种前端测试框架,按照预设的脚本在业务系统上执行各种操作,对系统进行测试。测试结束之后,就可以重启数据库,测试数据就都不存在了。用脚本恢复业务表的引擎即可。你可能会想问,为什么不单独搞一个数据库做测试使用?在数据库集群环境中,搭建测试库的工作非常大。数据库中间件,要重新定义几百张数据表有什么切分规则,然后怎么路由到测试库上面,还有父子表关系,还要配置全局主键方案等等。测试完还要在改回来,所以DBA并不愿意这么做。还有一些其他的业务方案也会要用到修改引擎,所以有问题要结合实际情况,而不是纯粹照着书本去看问题。你说的疯狂创建索引这个提法是不对的,因为修改引擎之后,我是要把字段索引改成HASH,索引速度更快。另外,遇到技术问题可以加讲师的QQ号(106135489)或者加入本课程的QQ群提问,这样更有时效性。祝你学习愉快。

2
0

阿里新零售数据库设计与实战 (升级版)

解锁“新零售”业务让数据库实战能力再上一层楼

2101 学习 · 701 问题

查看课程