MySQL/SSRS性能问题-涉及添加1列/14行的数据集,查找



不久前,我从一家第三方供应商那里请求了一份SSRS报告,该报告生成了一份PDF,其中每个用户的数据除以三个月(最终可能有60-100个用户(。

我们要求满足几个条件,程序员最终得到了13个数据集,35个表达式,其中一些包括一个"=code.store…";(我不知道这意味着什么(和查找。

程序员没有满足我们的一个要求:如果在部门中找到值,则确保行将项的名称更改为硬编码的通用值。例如";华硕ROG Zephyrus G14";属于笔记本电脑部门,则该值变为"0";笔记本电脑";。只有一个部门有这种情况。

当我问原因时,程序员告诉我这是不可能的。它只能检查固定值,而不能检查部门本身,他需要对每个项目id进行硬编码才能更改名称。

所以,我想出了这个,并把它呈现给程序员:

MySQL

select C.intInventoryItem as InventoryValues from TblInventoryManagerItems inner join (
select intDepartment, intInventoryItem from 
TblInventoryManagerItemDepartmentLinks where intDepartment = @department) as C
on TblInventoryManagerItems.intInventoryItem = C.intInventoryItem
group by C.intInventoryItem

然后在SSRS上

(Lookup(Fields!intInventoryID.Value,Fields!InventoryValues.Value,Fields!InventoryValues.Value,"Department") <> Nothing)

当我向程序员展示这个工作证明时(以一种非常礼貌、非侮辱性的方式,几乎让自己在电子邮件中看起来很愚蠢(,他说这会导致巨大的性能问题,如果我们需要这样的解决方案,那将需要花钱,并且需要一个月的时间才能交付。

因为我一开始就被欺骗了,所以第二个答案变得非常可疑,我们仍然没有得到我们最初要求的东西。

数据集为1列14行。尽管每行都会检查14行,但它仍然运行得很快,我认为与原始报告在时间上没有差异。然而,MySQL和SSRS并不是我的主要编程语言,因此我更愿意咨询这方面的专家。

TL;DR-我如何在SSRS中测量一个报告与另一个报告的执行时间?(类似于Python中的time.clock(((;此外,添加1个1列14行的数据集,然后查找是否会导致巨大的性能问题?

首先,让我们清理SQL。

select  C.intInventoryItem as InventoryValues
from  ...
group by  C.intInventoryItem

也许你的意思是

SELECT DISTINCT C.intInventoryItem as InventoryValues
from  ...

似乎不需要包含intDepartment

SELECT  intDepartment, intInventoryItem

您可能可以在没有子查询的情况下使用JOIN。

也许这就足够了?

SELECT  DISTINCT intInventoryItem
FROM  TblInventoryManagerItems AS mi
JOIN  TblInventoryManagerItemDepartmentLinks AS dl USING(intInventoryItem)
WHERE  dl.intDepartment = @department

索引:

dl:  INDEX(intDepartment, intInventoryItem)
mi:  INDEX(intInventoryItem)

请考虑缩短表名和列名。

最新更新