2012-12-25 106 views
2

我有一個約530萬條記錄的數據集。我有一個很瑣碎的問題與此查詢:使用全文搜索搜索500萬條記錄

select 
    SystemId, 
    Id, 
    FirstName, 
    LastName, 
    AptUnitNo, 
    Zip, 
    StreetName, 
    streetnumber, 
    (case 
    when LastName like '%robe%' 
     then -8 
    else 
     0 
    end) as Ordervalue 
From registeredusers 
Where LastName like '%robe%' 
Order by Ordervalue, LastName, FirstName, StreetName, StreetNumber ASC 
limit 0,50 

該查詢給出了一種基於在姓氏中找到的最佳匹配的記錄。我在姓氏上添加了全文索引。

我需要一些幫助如何將上述查詢轉換爲基於全文索引的工作。

我試圖使用匹配而不是like操作符,但它給我一個錯誤。

+0

分享我們的解釋計劃,並創建表格構造 –

+1

另外,你可以給我們錯誤的文字,當你嘗試匹配。 – DWright

回答

1

請注意,由於開始「%」,約束「LastName like'%robe%'」將強制MySQL執行全表掃描,儘管所有500萬行。這是非常緩慢的,大多數時間是不可接受的生產系統,如網站。問題是你無法創建有效的索引來幫助查詢。 MySQL全文索引稍好一些,但性能不佳。

在這種情況下,像Sphinx或Solr這樣的外部搜索引擎可以兼顧性能和功能。