场景分析
库中有一张表记录着所有客户文件上传或者、客户上传的BASE64
图片资源,file_store_record
表中有两个字段 name
original_name
分别取记录文件名称和文件的原文件名称,由于文件名称是唯一的,有些做法会在该字段下建立唯一索引,并且都是通过时间戳(秒||毫秒)+ 文件后缀的形式去生成唯一值
1 | name original.name |
索引优化
首先我们分析下上面的情况,能如何去优化,或者说有哪些问题,首先name
的字段类型是 VARCHAR,VARCHAR 存储可变长度的 M 个字符,大小 0-65535 字节,如果是 UTF-8 编码的话,一个字符占 3 字节,如果是 UTF-8mb4,一个字符占 4 字节,UTF8mb4 varchar(10)=40字节;从上面的例子可以看出已经超过了 20 字符,name 字段 varchar(20),索引的存储并不会存储你改列的实际大小,只会存储改字段定义类型所占的字节大小;第二是索引是存储在内存中的,索引的查找也是会设计到比较的,虽然是存储在内存中,一般还是建议索引的类型和长度越短越好,第三的思路是进行比较部分长度,其实在前12,13,14 位的区分度就比较高,可以建立 前缀索引
1 | 思路一 |
检错能力极强,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的几率仅为0.0047%以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。因而,在数据存储和数据通讯领域,CRC无处不在:著名的通讯协议X.25的FCS(帧检错序列)采用的是CRC-CCITT,ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像存储格式GIF、TIFF等也都用CRC作为检错手段。
测试情况,由于样本不多,不过也能分析出大概情况
1 | # 区分度并不高 |