读完MySQL大叔对数据储存页的设计不得不叹为观止,五体膜拜。具体怎么个存储法这里我就不啰嗦了,推荐大家自己去看<MySQL是怎样运行的>这本书。看完这本书有一天我去快递驿站取快递,发现快递小哥都按照快递号从小到大一排排的排列好了快递,嗯,很不错。当有客户来取快递的时候,随机看向一处,然后开始遍历,一个个比对快递号的大小跟我们需要的快递号的大小。为此我也在取快递的业务中排起了长队,因为效率实在太低了。如果有人跟我杠,说让快递小哥用二分查找法啊,提升查找的速率, 在说我这句换的时候我估计会被打死, 一天本来就挺累的,你跑来跑去试试。为此我根据MySQL设计大叔的思想想出了一个好的方法来提升他的工作效率,还能减少工作量。
(1) 首先,不得不表扬的快递小哥按照快递号从小到大排序的方式还是很受表扬的,这对于快递少来说没多大点事。但是一旦多了,效率将会大大降低。 遍历,那是不可能遍历的,这辈子都不会遍历。我们可以将这些快递按照快递号进行分段(MySQL底层是页)处理。比如这个货架存放的是1-20号的快递,这些快递依旧是按照从小到大的顺序排序。另一个货架是21-40号.... 依次类推。
(2)问题解决了,当来以为客户取客户的时候,先报号码, 68, 哦,在第6个货架,然后找到这个货架最小的记录,开始依次往后查找。
(3)快递小哥按照我的设想改造发现确实好使,效率提升不少。在干了几年之后规模扩张。每天有上万的快递在快递驿站。发现效率又慢了。我来取快递又得等很长时间,程序员的时间可是很宝贵的,于是我又想出了一方法,你可以在分段(MySQL底层是页)的基础在分区啊,比如20的粒度对你这一万的快递来说太小了。可以在按照每100个数据分成一区,二区,三区。一区代表的数据就是1-100,二区就是200-201,如果数据再多起来,我想应该不用我说了吧。哈哈,先根据区确定好要去哪个区,然后根据在根据区中每个货架的偏移量(最大值,最小值)找到对应的货架,是不是效率很快。那要是再非常非常多咋办? 建立另一个快递站点啊(分表)