有多种方式都可以实现数据匹配,那么你知道哪种性能最快吗?
适用场景
小型数据优先考虑易用性,大型数据优先考虑性能。
测试条件
在 50 万的数据中匹配出对应的内容。
VLOOKUP 完全匹配
=VLOOKUP(A1, '工作表1'!A:B, 2, 0)
耗时约 22 秒左右。
INDEX + MATCH
=INDEX('工作表1'!B:B, MATCH(A1, '工作表1'!A:A, 0))
耗时约 1.7 秒左右。
INDIRECT + MATCH
=INDIRECT("工作表1!B"&MATCH(A1, '工作表1'!A:A, 0))
耗时约 1.1 秒左右。
IF + VLOOKUP 近似匹配
=VLOOKUP(A1, '工作表1'!A:B, 2, 1)
耗时约 184 毫秒。
从以上测试结果可以得出 VLOOKUP 的完全匹配是最慢的,MATCH 完全匹配的速度要比 VLOOKUP 快非常多,但是在相同使用 MATCH 的情况下,使用 INDIRECT 的速度要比 INDEX 略微快一些。VLOOKUP 的近似匹配速度是最快的,但是也有缺陷,近似匹配没办法保证数据是精准的。
根据以上结论可以将这些组合起来使用,在复杂数据中达到最佳的性能。优先使用 VLOOKUP 近似匹配,判断内容是否一致,若是一致返回对应结果,若是不一致再使用 INDIRECT + MATCH 进行匹配。因为 VLOOKUP 的近似匹配运行速度几乎是毫秒级的,如果能匹配出数据要大幅的节约了 MATCH 查询所要消耗的时间。
=IF(IFERROR(VLOOKUP(A1, '工作表1'!A:A, 1, 1)) = A1, VLOOKUP(A1, '工作表1'!A:B, 2, 1), INDIRECT("工作表1!B"&MATCH(A1, '工作表1'!A:A, 0)))