mysql之虚拟字段
发布网友
发布时间:2023-04-25 14:29
我来回答
共1个回答
热心网友
时间:2023-10-15 20:56
因为一些个人习惯的原因,我在设计数据表的时候比较偏向在表的最后一列添加一个类型为 json 的 extra 字段,专门存放一些非格式化字段,偶尔记一个 label,tag等非常便捷。但是现在遇到一个问题,json 中的某个字段在某些业务的时候被大量查询。
在 table 比较小的时候丝毫不影响效率,但是随着 table 增大,应该打到一个临界的时候查询速度骤降,一个简单的查询需要扫描 100w+ 行,查询时间从 3s 到 80s 不等。
常规操作时添加一个索引,但是由于查询的是 json 中的某个 key,mysql 目前没有办法直接给 json 字段添加索引,但是有一个曲线救国的办法,将其中的字段抽出来作为一个虚拟字段,然后给这个字段添加索引,这时候 mysql 就会缓存该字段,我们在需要查询的地方去使用虚拟字段就可以了,因为走的是索引查询速度特别快。
当然还有另外一个方法,就是将 json 的 key 提取出来作为一个新字段,这样做也可以但是需要修改很多地方,特别是在有很多插入和更新的操作的时候,还有可能引入新的 bug。