Mysql 最长匹配前缀

Mysql 最长匹配前缀,mysql,hadoop,hive,Mysql,Hadoop,Hive,在MySQL中,将“12684041234”与最长前缀匹配 SELECT num_prefix FROM nums WHERE '12684041234' LIKE CONCAT(num_prefix, '%') AND LENGTH(num_prefix) = ( SELECT MAX(LENGTH(num_prefix)) FROM nums WHERE '12684041234' LIKE CONCAT(num_prefix, '%') ) 表nums有一个名为n

在MySQL中,将“12684041234”与最长前缀匹配

SELECT num_prefix
FROM nums
WHERE '12684041234' LIKE CONCAT(num_prefix, '%')
AND LENGTH(num_prefix) = (
    SELECT MAX(LENGTH(num_prefix))
    FROM nums
    WHERE '12684041234' LIKE CONCAT(num_prefix, '%')
)
nums
有一个名为
num\u prefix
的列,其中包含前缀值


如何在hive中执行此操作?

以下是我在MySQL中执行此操作的方式:

SELECT num_prefix FROM nums
  WHERE '12684041234' LIKE CONCAT(num_prefix,'%')
  ORDER BY num_prefix DESC
  LIMIT 1
;

这将给出最长的前缀(
ORDER BY..DESC
)和一行(
LIMIT 1
)。

我认为当前的SQL查询不是最有效的方法,因为它需要进行完整的表扫描。性能会成为问题吗?@Mark Byers:性能不是问题。这是一个批处理作业,前缀表不大(几百个),如果需要,我可以缓存结果。这将导致极低的性能。该条件永远不能在num_前缀上使用索引,因此此查询将始终需要进行完整表扫描。这需要更多的努力,但是你可以搜索WHERE num_前缀IN(126840412341126840412312684041212684041126840411268404126840126841268126,12,1)。虽然我自己还没有验证过,但是如果你引用这些数字,据说查询速度会快22倍。其中,'12684041234','1268404123','126840412','12684041','1268404','126840','12684','12684','1268','126','12','1'中的num_前缀来源: