我确实需要两个表里的数据链接在一起怎么办呢。
一种方案是:我们可以做个冗余,建表的时候,就把这些列放在一个表里,比如一开始有 student(id,name)
, class(id,description)
, student_class(student_id,class_id)
三张表,这样是符合数据库范式的(第一范式,第二范式,第三范式,BC范式等),没有任何冗余,但是马上就不符合“编程规范“了,那我们可以用一张大表代替它, student_class_full(student_id,class_id,name,description)
,这样name和description可能要被存储多份,但是由于不需要join了,查询的性能就可以提高很多了。
除此之外,常见的还能思考到的解决方法比如有:
-
可以尝试拆解复杂查询语录成为多条查询语句,将1拆解为n+1,其中每条简单的大表查询尽量走索引,提高查询效率。当然也要参考隔离级别是否会产生数据不一致的情况。
-
join顺序适当优化,尽量优化
-
自建应用层缓存,但涉及到增删查改可能额外代价比较大。
当然多插一句,不同项目的业务不同,能定制化解决的方案也不尽相同,还是得根据实际情况来。