select substr(c.order_datetime,1,7) `日期` ,d.city_name ,c.order_vehicle_lv2_type `订单车型` ,e.define_vehicle_type`司机车型` ,count(distinct c.driver_id)`完单司机数` ,count(distinct c.order_id)`完单量` from hll_dwb.dwb_order_base_1d_tm c -- 订单表 join (select city_id,city_name,big_area from hll_dim.dim_city) d -- 城市表 on c.city_id=d.city_id join ( -- 司机宽表,分司机车型,全量司机数据 select dt,driver_id,define_vehicle_type from hll_dws.dws_driver_fact_1d_tm where dt between '2023-07-13' and '2023-07-19' and last_complete_cnt_1d > 0 -- 限制当天有过完单司机,缩小查询范围,提高查询速度 ) e on c.driver_id=e.driver_id and to_date(c.order_datetime)=e.dt where c.is_driver_completed=1 and c.order_vehicle_lv2_type in('微面包车','小面包车','中面包车') and c.dt=date_sub(current_date(),1) and c.is_bus_sc=1 --货运小车业务线 and c.is_fake_order=0 --订单是否为刷单,0为否 and d.city_name in ('杭州','成都','上海','重庆','金华','苏州','宁波','南京','北京','绍兴','温州','嘉兴','合肥','徐州','台州','南通','湖州', '临沂','潍坊','镇江','泰州','扬州','无锡','常州','保定','福州','厦门','西安','中山','惠州','佛山','东莞','广州','济南','南宁','昆明', '柳州','南昌','武汉','襄阳','桂林','西宁','江门','清远','郑州','汕头','长沙','石家庄','贵阳','乌鲁木齐','珠海','揭阳','咸阳','德阳', '济宁','太原','盐城','淮安','宿迁','长春','烟台','呼和浩特','兰州','沈阳','深圳','哈尔滨','大连','青岛','淄博','洛阳','天津','莆田','漳州','肇庆','泉州') and to_date(c.order_datetime) between '2023-07-13' and '2023-07-19' group by substr(c.order_datetime,1,7),d.city_name,c.order_vehicle_lv2_type,e.define_vehicle_type
时间: 2023-08-20 18:06:05 浏览: 116
VC.code.examples.match.string.rar_The Match_code_match.exe
这是一个复杂的SQL查询语句,以下是一些可能的优化建议:
1. 索引优化:确保相关表中的列都有适当的索引,特别是在连接和过滤条件中使用的列上创建索引,这样可以加快查询速度。在订单表(dwb_order_base_1d_tm)的city_id列上创建索引,在司机表(dws_driver_fact_1d_tm)的dt和driver_id列上创建索引。
2. 子查询优化:子查询可以使用临时表来优化性能。将子查询的结果存储在临时表中,并在主查询中引用临时表,这样可以减少子查询的执行次数。
3. 数据范围筛选:根据业务需求,确保查询的时间范围和城市范围合理,可以根据实际情况缩小查询范围,减少不必要的数据检索。
4. 避免函数调用:在过滤条件中避免使用函数调用,例如to_date(c.order_datetime)。可以在程序中预先将日期转换为所需格式,并直接在查询中使用。
5. 考虑分区表:如果可能的话,考虑将表进行分区,以便根据查询条件只检索必要的分区数据,从而提高查询性能。
这些是一些常见的SQL优化建议,具体的优化策略还需要根据你的数据库环境和数据量来进行调整。
阅读全文