Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Excel Vlookup太慢了_Sql_Excel_Vlookup - Fatal编程技术网

Sql Excel Vlookup太慢了

Sql Excel Vlookup太慢了,sql,excel,vlookup,Sql,Excel,Vlookup,我有一个Excel文件,在大约10000行上使用vlookup,每行8个vlookup。速度慢得可笑 它会在线查找另一个excel文件- =IF(ISERROR(VLOOKUP(E12,'Filepath.xlsx]Data'!$U:BV,54,0)),"None",VLOOKUP(E12,Filepath.xlsx]Data'!$U:BV,54,0)) 我环顾了一下四周,发现vlookups似乎很有必要。是否存在可能的结构更改,例如SQL数据库上的vlookups,可以使这一过程更快 谢谢根

我有一个Excel文件,在大约10000行上使用
vlookup
,每行8个
vlookup
。速度慢得可笑

它会在线查找另一个excel文件-

=IF(ISERROR(VLOOKUP(E12,'Filepath.xlsx]Data'!$U:BV,54,0)),"None",VLOOKUP(E12,Filepath.xlsx]Data'!$U:BV,54,0))
我环顾了一下四周,发现vlookups似乎很有必要。是否存在可能的结构更改,例如SQL数据库上的vlookups,可以使这一过程更快


谢谢

根据我的评论,使用排序查找范围的
查找
公式要比使用
VLOOKUP
快很多,在这种情况下快100多倍,例如,如果我使用此公式,则进行一些速度测试

=VLOOKUP(B3,$D$3:$D$10002,1,0)

然后使用G3:G10002包含与D3:D10002相同的值,但按此
查找
公式升序排序

=IF(查找(B3,$G$3:$G$10002)=B3,查找(B3,$G$3:$G$10002),NA())

这些公式产生的结果完全相同,但由于“二进制搜索”的好处,第二个公式始终比第一个公式快120-140倍

如果我使用
索引/匹配
等效项,即

=索引($D$3:$D$10002,匹配(B3,$D$3:$D$10002,0))

这实际上比VLOOKUP版本稍微慢一点,不过,正如Doug所说,如果在多次计算中使用相同的
MATCH
公式,那么你可以只对多次结果计算一次,这样可能比VLOOKUP更有效


当然,您的设置中可能还有其他因素会减慢计算速度。…

尝试切换到索引/匹配组合。这将允许您每行只进行一次匹配。另外,请看:您能按
升序对U列进行排序吗?如果是这样的话,你可以使用一个
LOOKUP
公式,这个公式要快得多,应该超过50%,即
=IFERROR(如果(LOOKUP(E12,Filepath.xlsx]Data'!$U2:$U10000)E12,“None”,LOOKUP(E12,Filepath.xlsx]Data'!$U2:$BV10000)),“None”)
删除一行(或500行)很慢因为这会更改
VLOOKUP
范围,并且每个范围都必须重新计算。使用命名范围也可以加快繁重的工作表,但是一旦设置重新排序,索引/匹配会更好、更容易管理:排序只需在“查找范围”(查找数组的第一列)上,当然,需要包括其他列。你是说查找范围改变了吗?使用使用“二进制搜索”的查找意味着查找需要评估大约13(=Log(10000,2)的值,而使用VLOOKUP则需要评估多达10000的值,从而提高性能