数据查询优化
前言:我这时只是一个码龄3月学生,我现在的心智和见识能想到的就这点,所以如果这个对于你来说并没用可以不看,只是我的一个想法而已
最近自己捣鼓一个ssm小作业,里面有一个功能处理是:
B表外键关联A表,再web端会有一个表格显示B表的数据,其中包括:A_id,但是在web端显示A_id不符合需求;我们应当显示A_name;直接思维是拿A_id去A表中查询,拿到name显示,哪前端如果显示10w条数据,就会查询10w次,对A表进行10w次扫描。。。
对于此我有俩个解决方案:
一:在B表数据设计的时候,不考虑数据库设计三范式,直接设计B表格式为:
`create table B_table(
-> id int(11) not null auto_increment,
-> data varchar(200),
-> A_id int(11),
-> A_name varchar(200),
-> primary key(id)
-> );`
这样设计以后,在后台设置一个Admin对象,用来存储用户登录时的Admin对象,Admin对应A表
当在web页面进行对B表数据添加时,可以将这个Admin对象中的id和name取出来存储在B的表格中,在web端进行显示A_name就可以了,
这样可以减少了通过A_id去A表查询相应的name,要知道,当A表数据量达到很庞大时,这时的查询操作会拖累性能;这是一个很普遍的解决方法,也是最轻松的,
但是,我当时小作业已经敲到一半了,再去动数据表结构,需要改动有点多,就想了另一个解决方案:
从数据库中把数据迁移到内存中来,再项目启动前,定义初始化方法,
(不喜欢csdn博客的代码展示,喜欢自己idea主题显示,所以以后的代码都用图显示;)
但是其实这样还是不行,当Admin对象用户量达到很庞大时,这个map会占用很多空间,所以sun定义的map我们不能用,可以自己造一个HashMapCopy啊!
要造HashMap就得明白其实现原理,所以要去翻翻源代码
前言结束