我有一個postgresql數據庫,其中包含大約5000萬個地址字符串條目。字符串的例子是在多個正則表達式中匹配字符串
NIAID, Opportunist Infect Res Branch, Treatment Res Programs, Div Aids, Bethesda, MD USA
PRINCETON UNIV,DEPT PSYCHOL,PRINCETON,NJ 08544
等
現在我要檢查,如果地址匹配任何的約30000正則表達式列表。我也需要知道哪個正則表達式匹配。正則表達式的示例是
%umass mem med ctr worcester%worcester%ma%
%darnnouth%
這當然是'LIKE'格式的postgres。由於正則表達式匹配無法利用索引(不管怎樣,我已經對varchar_pattern_ops字段進行了索引),所以此操作的總運行時間將約爲3億5千萬。
我還可以使用python來執行正則表達式匹配,如果存在任何python庫,這將幫助我加快進程。
感謝您的幫助!
30000正則表達式:這是相當多的,你可能想先編譯他們,如果這將是重複幾個查詢。 – 2013-04-09 14:38:43
「編譯」是什麼意思?查詢postgresql數據庫不需要編譯afaik。它不會被重複。這是一次性操作。 – amhrpi 2013-04-09 15:34:08
不確定你對postgres能否像這樣的查詢使用索引是正確的。如果你在表達式的開頭有'%',那麼它仍然會導致seq掃描。確保你檢查'EXPLAIN' – 2013-04-09 15:55:07