前几天分享过一些工程实践规范或原则,今天分享最最重要的一条

570 阅读3分钟

「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战」。

按道理来说,应该先分享这一条的,但是如果真的是先分享这一条,那也最可能是被忽略的一条。这一条就是:“不要相信任何规范或原则”。也可以说是不迷信任何规范或原则,或者不惧权威,“实践是检验一切真理的标准”。要知道一句话:“汝之蜜饯,吾之砒霜”,“经验”这玩意儿坑起人来,那才是真的天坑,这个“经验”无论是自己的,还是他人的。

这么空泛的话现在这么简单的说出来可能也是有点苍白,也是不愿意首先分享这一条的原因。还是从一个小事情分享起来吧。

有一次学员指着我代码库里的一行SQL说:“不是说不要使用SELECT * 吗?这样会影响性能。”,作为一位有丰富辅导经验的老成员了,一听到这句我就知道,这种情况应该是被什么速成教学或速成学习洗脑了,我当然也不会解决表面症状回答这个问题。我会反问:“为什么不能使用?你知道MySQL的存取逻辑和存储数据结构吗?” 。

反正这些问题并不是为了回答这些问题,主要目的是两个:一个是促使他去深入的钻研琢磨一下,另外一个更重要的目的是为了打破禁锢他思考的“准则”或“权威”。

初学者有钻研精神太重要了,这意味着研发这条路你能走多远。

网上找了个图如下:

image.png

我们可以看到数据组织的情况,是一行一行的存储在一个一个的page里的,而每一行是有一个数据长度大小的,超出的会额外存储到其他页的,比如很多变长或大存储的VARCHAR或TEXT之类的。

如果"SELECT *"导致你多page查询了,那就可能引发多次磁盘寻址和I/O,这就会影响效率。如果只是一些小表,何必折磨自己呢?工程实现除了要求系统的高效率,也要求实现过程的高效率呀。

#今日份十分钟#希望这条最重要的规范或原则说到你的心里,并且能够帮到大家。大家也可以留言帮我完善内容或思维,也可以留言说说自己打破的那些“原则”或“规范”,或者被“经验”坑到过的案例,让打击一起学习进步吧。

ps:这个例子主要是为了打破思想禁锢,并不是说"SELECT *"禁用有问题,从技术管理角度来说,“可爱的”同学太多,为了降低管理成本这样一刀切,完全是能接受并且高效的。