2013-03-02 49 views
1

我的目的
我需要SELECT WHERE string IN ('...')查詢,stringVARCHAR (1000)INDEX或FULLTEXT存儲一個VARCHAR(1000),MySQL的

問題:
我不知道我應該使用FULLTEXT指數,或只是一個簡單的INDEX

的PROBL EM:
搜索將完成在兩個類似的表,其中包含兩個string場查詢製造多UNION,所以我不知道不知道,如果FULLTEXT將使這個快與否。
(我的FULLTEXT索引的想法是利用他們MATCH AGINST查詢)

結構:
你可以看到我是如何構建我在不同的表的多個string領域的問題,我在做之前How to structure this DATABASE idea

注:
這個問題是關於哪個索引的類型是情況較好。我只是將結構化問題聯繫起來,讓讀者更多地瞭解我正在做的事情。它不是重複的。

+0

你真的需要索引VARCHAR 1000? - 你想在這裏做什麼?您的鏈接不會描述您想要達到的目標以及您要搜索的數據類型。 – Steve 2013-03-02 19:48:56

+0

@Steve這將是一個單詞和短語的集合。平均長度不會超過400個字符,但1000是長度限制。在鏈接中,我提出了一個查詢示例,該示例檢查表中是否存在來自一組單詞組合的內容。 :) – 2013-03-02 19:56:07

回答

3

1-N

如果你的單詞和短語是常見的,多行之間將被複制,你應該考慮他們分離出成1 n的關係。這樣,通過將數據與數據結合起來,可以更有效地搜索和查詢數據。這可能不符合您的要求 - 完全取決於單詞和短語的類型。

FULLTEXT

索引一個varchar 1000是一個壞主意(我不喜歡做假設,但這通常總是不好)。這不僅會使用大量的內存和索引空間,如果您的數據集增長,它將成爲一個難以解決的性能瓶頸,當它開始成爲問題時。這就是FULLTEXT的原因,如果你使用的是MySQL 5.6或更高版本,你現在可以在INNODB表上使用FULLTEXT - 如果你使用的是舊版本,它不幸的只會在MyISAM中支持,而且存儲引擎有缺點(一些相當大的,所以請在選擇它之前研究它)。

適當的搜索

最好的解決辦法是使用合適的搜索引擎,如LuceneSphinxXapian

+0

謝謝。非常清楚:) – 2013-03-02 20:57:05

+0

還有一件事。我讀過你只能從VARCHAR的前幾個字符。如果我爲字段的前5個字符編制索引,它只會幫助'LIKE'str%''查詢還是'IN'('str ..')字段? – 2013-03-02 21:10:16