我对这种情况会发生什么感到困惑。我们在SQL Server中有一个列,例如VARCHAR(500)。迁移工具(MySQL Workbench)将索引截断为255.我发现的另一个post以及Google上的许多其他位置表明255是基于VARCHAR的索引的限制。从这个post here,我看到它是前255个字符。但我对实际操作中的效果感到困惑。换句话说,如果通过运气不好,我正在寻找一个子串(使用"喜欢"子句),它位于实列中的255点之后,会发生什么?或者如果我使用" =",">"等比较列会发生什么,但在比较字符串中使用超过255。在这种棘手的情况下,它只是忽略了索引,还是什么?
新的MySQL,多年来一直在使用SQL Server,所以只是想了解期待什么。感谢。
答案 0 :(得分:0)
限制以字节为单位,InnoDB的限制为767。因此,如果它的UTF8(MySQL的UTF8实现仅支持最多3个字节的字符),则限制为255个字符。如果它是单字节字符集,那么你的索引显然可能更大。
如果列大于索引,则使用索引永远不会找到完全匹配,并且必须完成一些表扫描,尽管它将使用范围的索引来关闭。
LIKE
和其他比较运算符仍然可以正常工作。他们可能性能较差。