首页 新闻 会员 周边 捐助

分不多 谢谢!sql 数据库语句优化疑问路过的大侠帮忙看下

0
悬赏园豆:30 [已解决问题] 解决于 2015-06-16 22:48

现在的sql语句 

Select  v_id as dyn_vehid,Dyn_Time ,v_companyid ,dyn_mile  
        From WisdomTaxiPosition_2015_1_15..T_Dyndata WITH (NOLOCK) 
left Join V_CompanyVehicle WITH (NOLOCK) On Dyn_VehID=V_Id 
        Where  dyn_mile is not null 
        and Dyn_Time Between '2015-01-15 00:00:00' And '2015-01-15 23:59:59' 
        And TenantId=123476 And V_CompanyID=1  

Union All 

Select  v_id as dyn_vehid,Dyn_Time ,v_companyid ,dyn_mile  
        From WisdomTaxiPosition_2015_1_16..T_Dyndata WITH (NOLOCK) 
left Join V_CompanyVehicle WITH (NOLOCK) On Dyn_VehID=V_Id 
       Where  dyn_mile is not null 
      and Dyn_Time Between '2015-01-16 00:00:00' 
      And '2015-01-16 17:20:11' 
      And TenantId=123476 And V_CompanyID=1 

用union all 的原因是一日一库的原因 所有导致了这样的写法 这个没法改

V_CompanyVehicle是个视图

具体的如下 

 

个人想法优化想法:

第一 dyn_mile入库数据的时候默认设置为-1 不要有null 通过看博客园数据库优化说 

dyn_mile  is not null导致查询语句不走索引

 

第2 

把条件放到外面来 具体格式如下

select xxxxx  from(
Select  v_id as dyn_vehid,Dyn_Time ,v_companyid ,dyn_mile  
        From WisdomTaxiPosition_2015_1_15..T_Dyndata WITH (NOLOCK) 
left Join V_CompanyVehicle WITH (NOLOCK) On Dyn_VehID=V_Id 

Union All 

Select  v_id as dyn_vehid,Dyn_Time ,v_companyid ,dyn_mile  
        From WisdomTaxiPosition_2015_1_16..T_Dyndata WITH (NOLOCK) 
left Join V_CompanyVehicle WITH (NOLOCK) On Dyn_VehID=V_Id 


)
 temp 
where 条件

疑问?

这里需要建立联合索引

问题是

 TenantId  V_CompanyID 是视图里面的表的字段

不知道这个索引是建立在视图表上还是

WisdomTaxiPosition_xxx..T_Dyndata 上

 

 看下了下执行计划 里面有FID

 

 

这里我的直觉应该很多优化的地方

希望各位园友赐教 谢谢

s_p的主页 s_p | 初学一级 | 园豆:140
提问于:2015-01-16 18:04
< >
分享
最佳答案
0

一日一库确实……

因为一日一库,所以时间索引没什么用,Dyn_VehID=V_Id这里建索引,并把相关的列建包含索引:create index xx on table include(xxx,xxx,xxx)

收获园豆:15
马非码 | 初学一级 |园豆:192 | 2015-01-19 21:59
其他回答(1)
0

首先且不谈优化..这个设计的就有问题吧....一日一库是什么意思?一天一个库?....如果一日一表倒还可以理解...但是你数据量有多大需要一日一表?还有就是有这种需求...为什么不用分区表实现?

第二种方式优化性能会更差...建议优先缩小数据范围..在union all...如果创建索引最优先的是Dyn_VehID=V_Id这两个字段...其它可以参照我的博文以此进行...http://www.cnblogs.com/zhijianliutang/p/4204390.html

收获园豆:15
指尖流淌 | 园豆:340 (菜鸟二级) | 2015-01-17 15:25

对应的业务 一些数据庞大的 一日一个库(库里面对应建立表 ) 类似分区表一样的一样的逻辑 

 

支持(0) 反对(0) s_p | 园豆:140 (初学一级) | 2015-01-17 20:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册