下记SQL执行很慢,因为数据量很大,4个大表关联,请各位帮忙,如何优化
SELECT
DISTINCT
EMPLOYEE.NAME AS NAME,
CHAINSTORE.STORENAME AS STOREID,
ORDERINFO.ORDERID AS ORDERID,
ORDERINFO.ORDERNAME AS ORDERNAME,
CONVERT(VARCHAR(10), COMMODITYFLOW.MODIFIEDDATE, 120 ) AS MODIFIEDDATE,
HQPRODUCTSPECIFICATIONS.HQPRODUCTSPECIFICATIONS AS HQPRODUCTSPECIFICATIONS,
HQPRODUCTSPECIFICATIONS.HQUNITPRICE AS HQUNITPRICE,
SUM(COMMODITYENTRY.QUANTITY) OVER (PARTITION BY CONVERT(VARCHAR(10), COMMODITYFLOW.MODIFIEDDATE, 120 ),COMMODITYENTRY.ORDERID,HQPRODUCTSPECIFICATIONS.HQPRODUCTSPECIFICATIONS) AS QUANTITY FROM
COMMODITYFLOW, --数据过100万条左右
ASSIGN_FINAL, --数据过10万条左右
COMMODITYENTRY,--数据过60万条左右
ORDERINFO, --数据10万条左右
EMPLOYEE, --数据不足1千条
COMMODITY, --数据不足1千条
HQPRODUCTSPECIFICATIONS, --数据不足1百条
CHAINSTORE --数据不足1百条
WHERE
ASSIGN_FINAL.ISCURRENT = 1
AND COMMODITYFLOW.STATEID = '35'
AND ASSIGN_FINAL.ORDERID = COMMODITYENTRY.ZZORDERNO
AND COMMODITYFLOW.COMMODITYENTRYID = COMMODITYENTRY.COMMODITYENTRYID
AND COMMODITY.COMMODITYID = COMMODITYENTRY.COMMODITYID
AND ORDERINFO.ORDERID = COMMODITYENTRY.ORDERID
AND EMPLOYEE.EMPLOYEEID = ASSIGN_FINAL.EMPLOYEEID
AND CHAINSTORE.STOREID = ISNULL(ORDERINFO.SZSTORE,ORDERINFO.STOREID)
AND CHAINSTORE.INUSE = 1
AND COMMODITY.HQPRODUCTSPECIFICATIONS = HQPRODUCTSPECIFICATIONS.HQPRODUCTSPECIFICATIONSID
SELECT
DISTINCT
EMPLOYEE.NAME AS NAME,
CHAINSTORE.STORENAME AS STOREID,
ORDERINFO.ORDERID AS ORDERID,
ORDERINFO.ORDERNAME AS ORDERNAME,
CONVERT(VARCHAR(10), COMMODITYFLOW.MODIFIEDDATE, 120 ) AS MODIFIEDDATE,
HQPRODUCTSPECIFICATIONS.HQPRODUCTSPECIFICATIONS AS HQPRODUCTSPECIFICATIONS,
HQPRODUCTSPECIFICATIONS.HQUNITPRICE AS HQUNITPRICE,
SUM(COMMODITYENTRY.QUANTITY) OVER (PARTITION BY CONVERT(VARCHAR(10), COMMODITYFLOW.MODIFIEDDATE, 120 ),COMMODITYENTRY.ORDERID,HQPRODUCTSPECIFICATIONS.HQPRODUCTSPECIFICATIONS) AS QUANTITY FROM
COMMODITYFLOW, --数据过100万条左右
ASSIGN_FINAL, --数据过10万条左右
COMMODITYENTRY,--数据过60万条左右
ORDERINFO, --数据10万条左右
EMPLOYEE, --数据不足1千条
COMMODITY, --数据不足1千条
HQPRODUCTSPECIFICATIONS, --数据不足1百条
CHAINSTORE --数据不足1百条
WHERE
ASSIGN_FINAL.ISCURRENT = 1
AND COMMODITYFLOW.STATEID = '35'
AND ASSIGN_FINAL.ORDERID = COMMODITYENTRY.ZZORDERNO
AND COMMODITYFLOW.COMMODITYENTRYID = COMMODITYENTRY.COMMODITYENTRYID
AND COMMODITY.COMMODITYID = COMMODITYENTRY.COMMODITYID
AND ORDERINFO.ORDERID = COMMODITYENTRY.ORDERID
AND EMPLOYEE.EMPLOYEEID = ASSIGN_FINAL.EMPLOYEEID
AND CHAINSTORE.STOREID = ISNULL(ORDERINFO.SZSTORE,ORDERINFO.STOREID)
AND CHAINSTORE.INUSE = 1
AND COMMODITY.HQPRODUCTSPECIFICATIONS = HQPRODUCTSPECIFICATIONS.HQPRODUCTSPECIFICATIONSID
先找一张主表,
把次关键的字段,直接写在select 后面
DISTINCT
EMPLOYEE.NAME AS NAME,
CHAINSTORE.STORENAME AS STOREID,
(select 字段 from COMMODITYENTRY where YENTRYID = COMMODITYENTRY.COMMODITYENTRYID) as 字段2
DISTINCT
EMPLOYEE.NAME AS NAME,
CHAINSTORE.STORENAME AS STOREID,
(select 字段 from COMMODITYENTRY where YENTRYID = COMMODITYENTRY.COMMODITYENTRYID) as 字段2 ......from
......