Sql Excel Vlookup太慢了
我有一个Excel文件,在大约10000行上使用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,可以使这一过程更快 谢谢根
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的值,从而提高性能