LIKE是否有替代方案?注意我無法使用FULL TEXT Search。MySQL LIKE替代方案
這是我的mysql代碼。
SELECT *
FROM question
WHERE content LIKE '%$search_each%'
OR title LIKE '%$search_each%'
OR summary LIKE '%$search_each%'
LIKE是否有替代方案?注意我無法使用FULL TEXT Search。MySQL LIKE替代方案
這是我的mysql代碼。
SELECT *
FROM question
WHERE content LIKE '%$search_each%'
OR title LIKE '%$search_each%'
OR summary LIKE '%$search_each%'
那麼,MySQL有regular expressions,但我想問你,多個LIKE是什麼問題。
我知道它不會很好地擴展,當表得到確實很大,但這對於使用MySQL的人來說很少關注(並不意味着在那裏貶低MySQL,這只是我注意到很多人似乎將它用於小型數據庫,將大型數據庫留給Oracle,DB2或SQLServer(或NoSQL,其中ACID屬性並不那麼重要))。
如果真如你說:
我打算使用它的真正的大網站。
那麼你應該完全避免LIKE。而且,如果您無法使用全文搜索,則需要推出自己的解決方案。
我們以前使用的一種方法是在表上使用insert/update/delete觸發器來填充另一個表。插入/更新觸發應該:
然後使用該表進行搜索,幾乎可以肯定不是多喜歡快多。它基本上是一種自己的全文搜索,您可以在其中精確調整和控制實際應該編入索引的內容。
這樣做的好處是在選擇過程中速度更快,更新過程中成本較低。請記住,對於讀取次數多於寫入次數的表(最常見),這是最好的辦法,因爲它可以分攤索引所有讀取中單個詞的成本。每次閱讀都會產生費用是毫無意義的,只有在數據發生變化時才能做到這一點。
而且,順便說一下,刪除觸發器將簡單地刪除索引表中引用真實記錄的所有條目。
表結構會是這樣的:
Comments:
id int
comment varchar(200)
-- others.
primary key (id)
Words:
id int
word varchar(50)
primary key (id)
index (word)
WordsInComments:
wordid int
commentid int
primary key (wordid,commentid)
index (commentid)
設置許多一對多關係,ID-ID(即單獨的詞和WordsInComments表),而不是ID文本(它們合併成一個)對於第三範式來說是正確的,但您可能想要考慮將存儲空間換成速度並將其結合起來,前提是您瞭解其含義。
你能說出你爲什麼不想使用LIKE?這可能有助於找到解決方案。 – 2010-07-20 06:42:09
在網站搜索中有更有效的方法嗎? – lone 2010-07-20 06:43:44