2013-03-19 55 views

回答

0

一般來說,它們不會從數據庫中返回。使用具有許多字段選項的高級搜索,並且可能還會從搜索服務器(例如LuceneSphinxXapian)返回一些用於良好度量的布爾邏輯。

從數據庫返回幾乎不可能有效。它通常是動態生成的查詢,如做:

SELECT ... WHERE 1=1 

然後,環比對方字段並添加

AND field LIKE '%abc' 
AND field_2 LIKE '%def%' 
AND field LIKE 'GHI%' 

Idealy加入whildchar %在開始或結束時,如果可能的(由於性能原因),或者兩者都用於現場數據中的搜索。

構建和運行此查詢使得它幾乎不可能具有良好的索引,這使得它們變慢並且成爲性能瓶頸的主要候選對象。

+0

謝謝你的見解,史蒂夫。如果您在社交網站上進行高級用戶配置文件搜索,您會繼續使用搜索服務器嗎? – ProgrammerGirl 2013-03-19 23:12:48

+0

@Programmer它真的取決於有問題的數據集以及您正在搜索的字段。有時候一個好的規範化模式設計可以幫助很大 - 例如存儲一個CountryId,StateId,TownId等,並且過濾附近的人更加高效,因爲必須通過操作字符串來生成相同的數據。搜索服務器是爲複雜的搜索而​​設計的,它們通常比RDBMS中的全部搜索服務器都快並且可擴展。 – Steve 2013-03-20 10:55:24