2013-05-27 66 views
2

我使用,我下載了其他地方的表,他們把一個叫DATA_SOURCE列其所有串接一個記錄的不同數據源,像這樣:可以對MySQL列編制索引以改善LIKE搜索嗎?

sourceA; sourceB; sourceC; ...

所以,如果我要尋找記錄從sourceB,我會做一個像搜索上%sourceB%

這顯然是一個耗時的查詢。我的問題是,如果我要索引列DATA_SOURCE,它是否會提高這些通配符搜索的性能?或者它不會有所作爲。

+0

你會好起來的,改制成爲這個[第一範式(http://en.wikipedia.org/wiki/First_normal_form),那麼你就能夠滿意指數吧。 –

+0

我同意,謝謝馬丁。 – ktm5124

回答

6

號索引像搜索被使用,但僅如果搜索繞圈不以通配符開始

所以LIKE 'Albert %'將可轉位,而LIKE '%Einstein%'不會。

之所以這樣,是當然,所有的指數並是構建體,其中所述的結果是當由該列排序,以減少從線性到對數複雜的搜索的內部表的。如果搜索繞圈使用通配符啓動時,它仍然會遍歷所有可能的值來匹配他們(所謂表掃描),從而消除索引的潛在性能增益。

+0

謝謝!這就是我曾經想過,想確定:-) – ktm5124

+0

其實我的答案是沒有完全* *完整的:因爲你只是想搜索完整的話,如果我理解正確的問題,全文索引可能實際工作如果您使用MyISAM進行存儲。這當然是一個非常冒險的解決方法,因爲沒有像其他地方建議的那樣進行正常規範化,但如果技術限制禁止從根本上更好的解決方案,它可能會起作用。 –

+0

我們在任何地方都使用InnoDB,因此切換這個實例可能不是一個好主意。我想,正如你所提到的,一個更好的主意是爲數據源創建一個單獨的查找表,然後加入。 – ktm5124

相關問題