+--------+ 1 N +------+
| | +--------> | Sub1 |
| | +------+
| |
| | 1 N +------+
| Main | +--------> | Sub2 |
| | +------+
| |
| | 1 N +------+
| | +--------> | SubN |
+--------+ +------+
查询业务: 以动态条件筛选数据,条件即有 Mian 的字段,又有 Sub1 、Sub2 、SubN 的字段。
select MAIN.ID, MAIN.OTHER
from MAIN
where MAIN.MAIN_CONDITON_FIELD=?
and MAIN.ID in (select SUB_1.MAIN_ID from SUB_1 WHERE SUB_1.SUB_1_CONDITION_FIELD = ?)
and MAIN.ID in (select SUB_2.MAIN_ID from SUB_2 WHERE SUB_2.SUB_2_CONDITION_FIELD = ?)
and MAIN.ID in (select SUB_3.MAIN_ID from SUB_3 WHERE SUB_3.SUB_3_CONDITION_FIELD = ?)
注 1: 副表字段再另行做查询补上,此处不讨论 1+N 查询。
注 2: 该查询逻辑,当副表条件筛选出来的
MAIN_ID
多的时候,性能严重下降
SQL
层面上考虑,如何做性能优化注:
数据模型不可变更;
查询业务不可变更;
不要求单 SQL ;
可以考虑增加专用与查询的辅助表或缓存表;
单纯从程序层面的缓存技术也可以,但要是能长期维护的,即不考虑临时黑科技。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.