当前位置: 代码迷 >> Sql Server >> 左联接查询优化解决方案
  详细解决方案

左联接查询优化解决方案

热度:38   发布时间:2016-04-24 09:00:38.0
左联接查询优化
SELECT *  FROM dbo.Tool_AssetsTool_1 as a 
LEFT JOIN dbo.Tool_AssetsTool_2 as b ON  a.VGUID=b.VGUID 
LEFT JOIN dbo.Tool_AssetsTool_3 as c ON a.VGUID=c.VGUID
LEFT JOIN dbo.Tool_AssetsTool_4 as d ON a.VGUID=d.VGUID
LEFT JOIN dbo.Tool_AssetsTool_5 as e ON a.VGUID=e.VGUID


查询11万条数据要四分钟,请问大神怎么优化
------解决思路----------------------
如果不需要,就不要用*号
------解决思路----------------------
然后,有条件就带进去过滤
------解决思路----------------------
把必要的字段列出来,在一些字段上加一些索引。
------解决思路----------------------
除了每个表的 VGUID 上加索引,没有什么好优化的了。
毕竟你 SELECT * 需要将所有的记录都取一遍,这个时间是省不了的。
------解决思路----------------------
对所需要查询的表 以查询条件建立表索引即刻提高查询速度 
或者应用子查询能减少关联时的记录数


SELECT 
   a.a1,a.a2,b.b1,b.b2,c.c1,c.c2,d.d1,d.d2,e.e1,e.e2
FROM (select * from a where a.a2='xxx')a
LEFT OUTER JOIN dbo.Tool_assetsTool_2 as b ON  a.VGUID=b.VGUID 
LEFT OUTER JOIN dbo.Tool_assetsTool_3 as c ON a.VGUID=c.VGUID
LEFT OUTER JOIN dbo.Tool_assetsTool_4 as d ON a.VGUID=d.VGUID
LEFT OUTER JOIN dbo.Tool_assetsTool_5 as e ON a.VGUID=e.VGUID


------解决思路----------------------
固化结果集啊,索引视图
------解决思路----------------------
问题是那个 * 上
------解决思路----------------------
左连接就会慢,尽量改为内连接
------解决思路----------------------
一般应该有where
而且数据大的时候要分页啊。所以就有条件了。
------解决思路----------------------
每个表的 VGUID字段 都建立索引
------解决思路----------------------
各表建立VGUID字段的索引,没有WHERE条件,优化空间不大。
------解决思路----------------------
如果是count(*) 需要多久啊? 数据库查询出结果 到 结果 显示在你的电脑上也是需要一定时间的。这个时间受你的电脑配置和与数据库之间的带宽影响。
------解决思路----------------------
SELECT COUNT(*) 和 SELECT * 是不一样的:光靠索引就能完成 COUNT(*) 计数;而返回所有字段是必须取全部数据的。
  相关解决方案