【发布时间】:2019-01-31 19:30:40
【问题描述】:
我有以下使用视图返回数据的查询,但从服务器请求返回似乎需要超过一分钟。
我使用这个代码:
SELECT CROP_CLASS As Closed, SUM(ACREAGE) AS SumofAcreage, SUM(delivered) AS SumofTonnage
FROM dbo.vCurrentParcelStatus
WHERE CropSeasonsID = @cropseason AND CURRENTSTATUS = '3'
GROUP BY CROP_CLASS
ORDER BY CROP_CLASS ASC
这需要一分钟多的时间,但给了我想要的东西。它从下面的 vCurrentParcelStatus 请求数据:
SELECT TOP (100) PERCENT dbo.CaneParcel.geoid, MAX(dbo.vCurrentParcelStatusHelp.CurrentStatus) AS CURRENTSTATUS, dbo.CaneParcel.ACREAGE,
dbo.CaneParcel.VARIETY, dbo.CaneParcel.FARMER, dbo.CaneParcel.BRANCH, dbo.CaneParcel.DATE_PLANT, dbo.CaneParcel.CROP_CLASS,
SUM(ROUND(dbo.vCurrentParcelStatusHelp.delivered, 1)) AS delivered, SUM(dbo.vCurrentParcelStatusHelp.number_deliveries) AS number_deliveries,
dbo.CaneParcel.ASSN, dbo.CaneParcel.PRODUCTION, dbo.CaneParcel.REAPING_LE, dbo.vCurrentParcelStatusHelp.parcel_id,
dbo.vCurrentParcelStatusHelp.crop_season, dbo.vCurrentParcelStatusHelp.CropSeasonsID
FROM dbo.CaneParcel INNER JOIN
dbo.vCurrentParcelStatusHelp ON dbo.CaneParcel.FIELD_ID = dbo.vCurrentParcelStatusHelp.parcel_id
GROUP BY dbo.CaneParcel.geoid, dbo.CaneParcel.ACREAGE, dbo.CaneParcel.VARIETY, dbo.CaneParcel.FARMER, dbo.CaneParcel.BRANCH, dbo.CaneParcel.DATE_PLANT,
dbo.CaneParcel.CROP_CLASS, dbo.vCurrentParcelStatusHelp.parcel_id, dbo.CaneParcel.ASSN, dbo.CaneParcel.PRODUCTION, dbo.CaneParcel.REAPING_LE,
dbo.vCurrentParcelStatusHelp.crop_season, dbo.vCurrentParcelStatusHelp.CropSeasonsID
ORDER BY dbo.vCurrentParcelStatusHelp.parcel_id
上面的视图从下面的这个视图(vCurrentParcelStatusHelp)获取数据:
SELECT TOP (100) PERCENT MAX(parcel_status) AS CurrentStatus, COUNT(tonnage) AS number_deliveries, SUM(tonnage_adjusted) AS delivered, parcel_id,
farmer_owner_bsi, crop_season, CropSeasonsID
FROM dbo.vDeliveryTons
GROUP BY parcel_id, farmer_owner_bsi, crop_season, CropSeasonsID
ORDER BY parcel_id
我尝试了这个查询,但它没有给我相同的结果:
Select
CaneParcel.Crop_Class As Closed,
Sum(CaneParcel.Acreage) as SumOfTonnage,
Sum(DeliveryTons.tonnage_adjusted) as SumOfTonnage
From
CaneParcel Left Join
DeliveryTons On DeliveryTons.parcel_id = CaneParcel.Field_ID Left Join
FarmerGroups f On f.farmer_bsi = DeliveryTons.farmer_bsi Join
(Select Distinct DeliveryTons.parcel_id From DeliveryTons Where parcel_status = 3 AND crop_season=3 and remarks = '') c On c.parcel_id = CaneParcel.Field_ID
Group By
CaneParcel.Crop_Class
DeliveryTons 表
id crop_season parcel_id reaping_code farmer_pay_bsi tonnage tonnage_adjusted grabs parcel_status rejected remarks delivery_status
77701 1 038-0358 CGP001 2064 15.3625 15.3625 34.00 2 2 P
77702 1 038-0358 CGP001 2064 17.4625 17.4625 43.50 2 2 P
77703 1 038-0358 CGP001 2064 13.5875 13.5875 30.00 2 2 P
77704 1 038-0358 CGP001 2064 19.0250 19.0250 44.00 2 2 P
77705 1 038-0358 CGP001 2064 19.6375 19.6375 45.50 2 2 P
77706 1 038-0358 CGP001 2064 16.2125 16.2125 36.50 2 2 P
77707 1 038-0358 CGP001 2064 22.5375 22.5375 55.00 2 2 P
77708 1 038-0358 CGP001 2064 18.1000 18.1000 38.00 2 2 P
77709 1 038-0358 CGP001 2064 23.0000 23.0000 55.50 2 2 P
77710 1 016-0482 BSFA156 7866 19.3000 19.3000 42.00 1 2 P
77711 1 016-0096 BSFA153 10024 15.2625 15.2625 34.00 1 2 P
77712 1 004-0684 BSFA155 10063 17.8125 17.8125 40.00 1 2 P
77713 1 004-0224 BSFA162 198 20.5125 20.5125 47.00 1 2 P
77714 1 BSFA160 212 16.0375 16.0375 0.00 0 2 NO_TICKET P
77715 1 BSFA159 4570 12.3875 12.3875 0.00 0 2 NO_TICKET P
77716 1 016-2473 BSFA151 9173 13.6875 13.6875 0.00 3 2 P
77717 1 016-1566 BSFA149 1094 15.7250 15.7250 32.00 1 2 P
77718 1 BSFA160 148 20.2125 20.2125 0.00 0 2 NO_TICKET P
77719 1 016-1566 BSFA149 1094 12.7625 12.7625 26.00 2 2 P
77720 1 016-1566 BSFA149 1094 15.3875 15.3875 28.00 2 2 P
77721 1 016-2152 BSFA175 926 15.2625 15.2625 0.00 3 2 P
77722 1 BSFA175 5498 13.7250 13.7250 0.00 0 2 NO_TICKET P
77723 1 016-2465 BSFA173 6529 13.6375 13.6375 0.00 3 2 P
77724 1 016-2373 BSFA177 3791 15.5000 15.5000 31.25 1 2 P
77725 1 016-1020 BSFA171 6468 16.1000 16.1000 19.00 1 2 P
77726 1 BSFA175 3019 13.1125 13.1125 0.00 0 2 NO_TICKET P
77727 1 016-2465 BSFA173 6529 14.0750 14.0750 0.00 3 2 P
77728 1 016-0309 BSFA182 5311 11.8125 11.8125 26.50 1 2 P
CaneParcel 表:
geoid FIELD_ID BSI_CODE ACREAGE CROP_CLASS ASSN FARMER BRANCH
0 004-0567 47 7.359515 RATOON CSCPA MARIN,OMAR COROZAL
1 004-0008 281 12.38654 RATOON CSCPA AKIERMAN,DAVID COROZAL
2 004-0012 281 7.899037 RATOON CSCPA AKIERMAN,DAVID COROZAL
3 004-0013 281 4.937749 RATOON CSCPA AKIERMAN,DAVID COROZAL
4 004-0014 281 5.002847 RATOON CSCPA AKIERMAN,DAVID COROZAL
5 004-0038 9050 6.731369 RATOON CSCPA AKIERMAN,DAVID ISRAEL COROZAL
6 004-0045 9028 4.120158 RATOON CSCPA AKIERMAN,MIRIAM COROZAL
7 004-0039 9050 8.519387 RATOON CSCPA AKIERMAN,DAVID ISRAEL COROZAL
8 004-0147 289 14.801 RATOON BSCFA-CZ CAMPOS,ELEONAI COROZAL
9 004-0572 47 5.878942 PLANTCANE CSCPA MARIN,OMAR COROZAL
10 004-0030 281 14.33925 RATOON CSCPA AKIERMAN,DAVID COROZAL
11 004-1150 281 7.306061 RATOON CSCPA AKIERMAN,DAVID COROZAL
12 004-1152 281 3.814288 RATOON CSCPA AKIERMAN,DAVID COROZAL
13 004-0017 281 11.5479 RATOON CSCPA AKIERMAN,DAVID COROZAL
28 004-0563 47 7.98629 RATOON CSCPA MARIN,OMAR COROZAL
FarmerGroups 表:
ID ASSN BSI_CODE FARMER CROP_SEASON PROD_EST BRANCH
10473 BSCFA-OW 5752 GARCIA,EUGENIO R 2 464 YO CREEK
10474 BSCFA-OW 8894 GARCIA,RAUL R 2 488 YO CREEK
10475 BSCFA-OW 4427 PECH,EVELIA 2 458 YO CREEK
10476 BSCFA-OW 5226 GONZALEZ,DALIA MARIA 2 195 YO CREEK
10477 BSCFA-OW 5753 GONZALEZ,ELVIRA 2 124 YO CREEK
10478 BSCFA-OW 9295 GONZALEZ,RAUL 2 138 YO CREEK
10479 BSCFA-OW 9996 GONZALEZ,TRANSITO 2 450 YO CREEK
10480 BSCFA-OW 10099 PERAZA,ALBERTA 2 830 YO CREEK
10481 BSCFA-OW 4537 GARCIA,SANTIAGO SILVERIO 2 167 YO CREEK
10482 BSCFA-OW 8573 ACK,AMELITA M 2 76 YO CREEK
10483 BSCFA-OW 7467 ACK,EUCARIO 2 96 YO CREEK
10484 BSCFA-OW 7468 ACK,MOISES 2 43 YO CREEK
10485 BSCFA-OW 1848 AGUIRRE,NENCIE 2 64 YO CREEK
10486 BSCFA-OW 4355 BLANCO,SILVIO 2 79 YO CREEK
10487 BSCFA-OW 4476 CAL,ALBERTA GARCIA 2 152 YO CREEK
10488 BSCFA-OW 4480 CAL,ENRIQUE 2 409 YO CREEK
10489 BSCFA-OW 2545 CAL,ERNESTO T 2 54 YO CREEK
10490 BSCFA-OW 6877 CAL,REMIGIO 2 76 YO CREEK
我希望从不同的 Field_Is 中获取面积总和和吨位总和,如果状态为 1 和 2,并且交付吨数中有字段 ID,则这些字段的最大包裹状态为 3,结合吨位通过 BSI 代码表也能够获得关联。
【问题讨论】:
-
定义
This takes more than a minute。您正在对表进行聚合,加入正在对另一个视图进行聚合的视图,并且谁知道该视图中的内容。展示你的执行计划,看看瓶颈在哪里。正如@bjk116 所说,“你的索引怎么样?” -
索引是什么意思?超过一分钟给我结果我的意思是最多 2 分钟@WEI_DBA
-
你的表有正确的索引吗?或者他们只是用 PK Identity 列索引?显示查询的执行计划...这将告诉您问题出在哪里。
-
我明白了:/* SQLQuery30.sql 中缺少索引详细信息 - SIMISMAIN.simisdb (sa (114)) 查询处理器估计实施以下索引可以将查询成本提高 65.9822%。 / / USE [simisdb] GO CREATE NONCLUSTERED INDEX [
] ON [dbo].[DeliveryTons] ([delivery_status]) INCLUDE ([delivery_id]) GO */ -
你有权创建索引吗?如果是这样,请在查询分析器中运行它,
USE [simisdb] GO CREATE NONCLUSTERED INDEX [IX_DeliveryTons_Delivery_Status_IVIAS] ON [dbo].[DeliveryTons] ([delivery_status]) INCLUDE ([delivery_id]) GO
标签: sql sql-server