2009-12-24 31 views
5

出了什麼問題:Mysql的比賽......對與簡單的像「一詞%%」

$term = $_POST['search']; 

function buildQuery($exploded,$count,$query) 
{ 
    if(count($exploded)>$count) 
    { 
     $query.= ' AND column LIKE "%'. $exploded[$count] .'%"'; 
     return buildQuery($exploded,$count+1,$query); 
    } 
    return $query; 
} 

$exploded = explode(' ',$term); 
$query = buildQuery($exploded,1, 
'SELECT * FROM table WHERE column LIKE "%'. $exploded[0] .'%"'); 

,然後查詢數據庫檢索按照一定的順序結果,而不是使用專用的MyISAM sql匹配...反對?

它會大幅度降低性能嗎?

+0

順便說一句我知道這個話題已經完全badgered和濫用。 – Gal 2009-12-24 01:30:42

回答

6

不同之處在於MySQL在後臺使用的算法查找數據。全文搜索還允許您根據相關性進行排序。在大多數情況下,LIKE搜索將執行全表掃描,因此根據數據量的不同,您可能會看到性能問題。處理大型行集時,全文引擎也可能存在性能問題。

在另一個筆記上,我將添加到此代碼中的一件事是逃避爆炸值。也許是爲了mysql_real_escape_string()

+0

那麼任何阻礙表現的想法會更多? 是的,當然你是對的,一個mysql_real_escape_string()將會放在那裏。 – Gal 2009-12-24 02:06:19

+0

在我的個人經驗中,像搜索往往是更多的性能密集型。這在使用通配符時最爲真實,該通配符不會允許mysql爲該字段上的索引優化查詢。 – 2009-12-24 02:23:32

6

一個電話你可以看看我最近的演講中,我沒有爲MySQL的大學:

http://forge.mysql.com/wiki/Practical_Full-Text_Search_in_MySQL

幻燈片也在這裏:

http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql

在我的測試,使用LIKE '%pattern%'比使用MySQL FULLTEXT索引慢300多倍。我的測試數據是來自StackOverflow October數據轉儲的150萬個帖子。

+0

恐怕你的比較方法有點不對。當您在大表中搜索時,LIKE速度較慢,但​​它不影響數據插入到數據庫的速度。搜索時匹配性能會更好,但會嚴重影響插入速度,因爲每個INSERT或UPDATE都需要重新索引。所以開發人員應該知道哪個操作具有更高的優先級。 – 2010-11-26 09:39:45

+0

我確實比較了索引現有數據集的性能,但您說得對,我沒有測試插入更多數據的性能。我不認爲MySQL的全文索引需要在插入時重新索引整個數據集 - 據我所知,只有Sphinx需要這樣做。 – 2010-11-26 22:21:56

+0

據我所知,每次插入或更新操作後,MySQL全文索引都會自動重新索引。如果我錯了,你能告訴我爲什麼在某些情況下全文索引使插入速度慢兩倍? 順便說一句,Sphinx的新版本支持實時索引,但在大多數情況下這些類型的索引效率較低。 – 2011-02-01 17:01:16