性能过滤一个装满数据行的非常大的数组

时间:2014-03-06 22:06:00

标签: sql arrays performance powershell datarow

我使用以下代码创建了以下两个大型数组:

$VPX_ENTITY = Invoke-Sqlcmd -Database $vc_DB_Name -ServerInstance $vc_DB_Server -Username $vc_DB_User -Password $vc_DB_Pass -Query $VPX_ENTITY_QUERY
$VPX_VM = Invoke-Sqlcmd -Database $vc_DB_Name -ServerInstance $vc_DB_Server -Username $vc_DB_User -Password $vc_DB_Pass -Query $VPX_VM_QUERY

因为我在查询SQL DB,所以数组项都是数据行。我需要对阵列进行过滤,但不会创建性能。这是我现在拥有的一个例子。

foreach ($VM in $VPX_VM){
        $VM_NAME = ($VPX_ENTITY | Where {$_.ID -eq $VM.ID} | Select -First 1).NAME}

这个工作并且相当快,但是这只是我将过滤的属性之一并且有20k个对象要循环。要运行整个脚本,它需要接近一个小时,我需要大幅改进或转向另一条路线。

我是否需要将数据行转换为字符串以提高速度?我可以改进上面的代码并使其更快吗?

我尝试使用:

$VM_NAME = ($VPX_ENTITY.Get($VM.ID)).NAME

然而,回来的结果总是不正确的。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

请检查:http://www.spjeff.com/2015/04/21/datatable-in-powershell-for-crazy-fast-filters/

使用Datatables和DataView。 DataView中的“.RowFilter”过滤器比其他过滤器更快。唯一的问题是你可以过滤一个字段。