2014-11-21 187 views
2

我有一個表與電話號碼的前綴列,如:漸進搜索最長前綴

prefix 
------ 
9379 
355422 
35566 
... 

鑑於我想,直到它找到的前綴列第一場比賽放棄其從右側開始位數的電話號碼。即:

937973418459 
93797341845 
9379734184 
937973418 
93797341 
9379734 
937973 
93797 
9379 <-- match found 

請注意,我需要爲電話號碼的列表,這樣做是爲了批量操作是很重要的,而不是單獨的查詢是緩慢的。我嘗試使用postgres的全文搜索:

tsquery('937973418459|93797341845|9379734184|937973418|93797341|9379734|937973|93797|9379') 

它的工作原理,但它的運行速度慢,反對說10K電話號碼。有沒有更有效的方法來解決這個問題?

回答

3

要找到最長前綴

對於給定數量:

SELECT * 
FROM prefix_tbl 
WHERE 937973418459 LIKE prefix || '%' 
ORDER BY prefix DESC 
LIMIT 1 

對於給定的數字的整個表:

SELECT DISTINCT ON (t.nr) 
     p.* 
FROM prefix_tbl p 
JOIN tel_nr t ON t.nr LIKE p.prefix || '%' 
ORDEr BY t.nr, prefix DESC; 

相關:

對於性能優化考慮dba.SE此密切相關的,廣泛的答案:

這:

+0

作品般的魅力,並且鏈接一流的! ;) – Marconi 2014-11-22 01:22:25