2015-01-08 43 views
-1

我對這種情況會發生什麼感到困惑。我們有一列,例如SQL Server中的VARCHAR(500)。遷移工具(MySQL Workbench)將索引截斷爲255.我發現的其他post以及Google上的其他許多地方都表明,255是基於VARCHAR的索引的限制。從這個post here,我看到它是第255個字符。但我對實際操作中的這種方法有些困惑。換句話說,如果通過愚蠢的運氣,我正在尋找一個子字符串(使用「like」子句),它位於實列中的255點之後,會發生什麼?或者,如果我使用「=」,「>」等比較列,但在比較字符串中使用了多於255的字符,會發生什麼情況。在這種棘手的情況下,它是否忽略了索引,或者是什麼?在遷移過程中MySQL VARCHAR索引被截斷爲255

MySQL的新增功能,多年來一直與SQL Server一起工作,所以試圖瞭解期望的內容。謝謝。

回答

0

該限制按字節應用,InnoDB的限制爲767。所以255個字符是UTF8的限制(MySQL的UTF8實現只支持3個字節字符)。如果它是單字節字符集,您的索引顯然可能會更大。

如果列大於索引,那麼使用索引將永遠不會找到完全匹配,並且必須完成一些表掃描,儘管它將使用範圍的索引來關閉。

LIKE和其他比較運算符仍將正常工作。他們可能性能較差。

+0

謝謝。如果「like」子字符串在前255個字符之外,會發生什麼情況,比如「像列'%FUN%'」,其中「FUN」子字符串不在前255個字符中。在這種情況下它會返回沒有匹配的行,還是會執行表掃描? – user3329922

+1

對於'LIKE'%FUN%'',無論索引大小如何,它都無法使用索引,只是進行表掃描。在這種情況下,指數限制甚至不重要。也許你想要一個FULLTEXT索引? –

+0

謝謝,我現在明白了。我有點忘記了這樣的「相似」陳述無論如何都無法使用索引,但現在我想到了它是非常有意義的。 – user3329922