我是这样查询的 create view ads.v_person_info_test_all (*,*,*.....) as select .... from ( select ... union all select ... union all select ... union all select ... ) as t0, ads. degree_dic as t1, ads.duty_dic as t2, ads.education_dic as t3, ads.know_info_dic as t4, ads. member_dic as t6, ads. member_level_dic as t7, ads. subject_dic as t9, ads. tech_post_dic as t10, ads.school_type_dic as t11 where t1.code = t0.degree and t2.code = t0.duty
前端是一个查询页面,拼出各种查询条件,然后后台调用select from where 的sql语句执行查询 速度还可以. 但是就是不能在数据库里直接查询,这样就死机.真是很奇怪. 我试了一下,直接union all把所有的表连接起来就没事. 我现在是用union all连接起来后当作一个表a,然后再用这个表a和其他的表联合查询.
union all 同 union 的区别是 union all 各表后,只是将各表的数据加在一起,无对数据进行进一步操作。union 在会对数据进行操作,目的,排除相同的数据,如果有多条相同的记录,只保留一条。所以 union all 的结果集> =union. 至于时间考虑,union all 虽然快,但结果集大,处理就成问题。时间也是要估量的。用什么操作,主要还是看需要什么。
建议你用2条sql 语句,一个用union ,一个用union all 看看时间,以及数据集,不要用select * ,select count(*),这样查询时间以及记录条数都很清楚。
至于如何看执行计划,你用control center -> sql 说明 (我是中文版),然后写入sql statement, 确定后,就会看到 执行计划,各部的开销也看到,至于如何减少开销,建议你看sql性能调整。