四表及多表关联查询问题

需要4表关联查询
目前有一张表为主表a,以名称及日期为主键
剩余三张表各数据项如下:
表b 名称,日期 ,型号
表c 名称,日期, 种类
表d 名称,日期, 重量
要求名称,日期相同的关联查询
最终呈现结果如下:
a.名称,a.日期,型号,种类,重量
我目前使用a left join b left join c left join d
前三张表关联查询效率为0.1s但加上第4张表后查询速度瞬间变成8s(注:第4张表数据量不大)
请问查询语句如何优化?(从语句查询方面考虑,不建立中间表或者视图)
如果是5张,6张用什么语句能够提高效率?

谢谢各位的回答,经过自行研究尝试,发现提高效率的方式
因为a表是主表,
所以可以a表与b表关联查询形成x表
a表与c表关联查询形成y表
a表与d表关联查询形成z表
最后统一提取x,y,z表,where 各表的名称
将四表查询化解为多个两表关联,然后统一查询

join表越多效率越低,一般超过三个就不要考虑再用了,多表关联可以通过创建视图去实现,或者如果数据时效性不是很高的话可以 把查询的结果放在一个中间表,然后获取数据从中间表获取

1、从表结构上:
①、不清楚你这些表是否还存在其他业务信息,单从你描述的信息来看,你的a、b、c、d表是可以合并为一张表的;

②、还有就是你的b、c、d表的主键也是跟a表一样吗?如果不一样,是否在名称及日期字段上建立了复合索引?;

③、此外,如果名称的值都比较长的话,需要建立一个名称编码表,使用其编码来作为a表的复合主键之一,这样即节约空间又可加快数据比较速度

2、从SQL上:
①、多表关联查询,如果可能,尽量使用小表去关联大表,且关联字段在大表中建立索引,你这里就需要为b、c、d三个表的名称、日期字段建立复合索引(如果不是复合主健的话);

②、至于增加一张表会大大增加查询时间,从某种角度上讲是正常的,比如你前三张表的关联结果集为1亿(a×b×c),即便d表只有100的数据量,那关联结果集就变成了100亿,1亿的数据量服务器可能0.1s就搞定,但100亿,8s搞定已经很不错了

③、关联的表越多,业务就越复杂,相反SQL的写法可能就会更多(前提是你足够了解你的目标数据),比如就a、b、c、d表而言,如果b、c、d表联合后的名称、日期数据完全覆盖(关键字加粗)了a表的数据,并且你的统计涉及四张表的所有或绝大部分数据,那么,除了你的 left join 一串外,还可以这样写:

SELECT 名称, 日期, max( 型号 ) 型号, max( 种类 ) 种类, max( 重量 ) 重量
  FROM ( SELECT 名称, 日期, 型号, NULL 种类, NULL 重量 FROM b UNION ALL
         SELECT 名称, 日期, NULL 型号, 种类, NULL 重量 FROM c UNION ALL
         SELECT 名称, 日期, NULL 型号, NULL 种类, 重量 FROM d ) t
 GROUP BY 名称, 日期;