2017-05-30 77 views
0

大家好,我打算創建10列的表,其中應該至少10,000,000行,並在裏面,我會有列description - VARCHAR(600)和索引上。MySQL-InnoDB索引varchar或索引多個變種

所以,問題是,它會更快查詢LIKE該列 - VARCHAR(600),或者它會更快在6列與100個字符分割描述和LIKEOR索引他們..

例如:description - VARCHAR(600) INDEX

SELECT `id` FROM `table` WHERE `description` LIKE "%something%" 

或它會更快在6列分割descriptiondesc1desc2,.. desc6VARCHAR(100) INDEX - 他們每個人與使用下面的查詢:

SELECT `id` FROM `table` WHERE `desc1` LIKE "%something%" OR `desc1` LIKE "%something%" OR `desc3` LIKE "%something%" OR `desc4` LIKE "%something%" OR `desc5` LIKE "%something%" OR `desc6` LIKE "%something%" 

之前我就開始創建數據庫只是想知道..

最好的問候,並感謝大家!

+0

你要搜索的內容?非結構化數據? – inetphantom

回答

3

它根本沒有區別。 。 。好吧,很少。該查詢將必須執行全表掃描,因爲like模式以通配符(「%」)開頭。

如果你關心性能,你應該把這個問題改爲全文搜索。從documentation開始。

+0

謝謝你的回答,因爲我關心性能,當我提到全文搜索時,我還有另外一個問題,我是否也應該在最多有40個字符的列上使用全文搜索(VARCHAR [40])。 – Ultrazz008

+0

@ Ultrazz008。 。 。這取決於你在尋找什麼。全文搜索主要關注列中的* words *,而不是子字符串。 –

+0

明白了,那麼這個選項就更好了......但是對於上面的一個,我將使用全文索引,非常感謝你的答案! – Ultrazz008

0

如果你必須使用LIKE '%something%'(即LIKE與領先的通配符),然後

  • 一列。 (少於6 LIKEs,加上ORs)另外,你會怎麼做something恰好分散在兩個塊?
  • 在該列沒有索引(因爲領先的通配符,該指數將不會使用)