Varchar上的索引是否会产生性能差异?

Mur*_*lai 38 mysql sql indexing performance varchar

varchar列上的索引是否使查询运行得更慢?我可以把它变成int.而且我不需要进行LIKE%比较.

OMG*_*ies 83

varchar列上的索引是否使查询运行得更慢?

不,不是的.
如果优化器决定使用索引,则查询将运行得更快. 该表上的INSERTs/UPDATEs/DELETEs将会变慢,但不太可能注意到.

我不需要进行LIKE%比较

请注意使用:

LIKE '%whatever%'
Run Code Online (Sandbox Code Playgroud)

... 不会使用索引,但以下内容将:

LIKE 'whatever%'
Run Code Online (Sandbox Code Playgroud)

密钥是通配符串的左侧意味着不能使用列上的索引.

还要知道MySQL限制了为索引留出的空间量 - 对于MyISAM(InnoDB为767字节)表,它们最长可达1000字节.

  • 谢谢,我不知道删除左通配符使用索引.我没想到根本不会支持通配符. (6认同)

Lei*_*h S 11

如果你可以用一个整数替换你的varchar列(我认为这是你的暗示)那么包含整数列的索引将比varchar列表现更好,原因有几个.

  1. 索引大小将更小并且涉及更少的分页.
  2. 整数的比较远比varchar好.

  • 关于第 2 点 -> 如果您已对其建立索引,那么除了投票最多的答案中所述的 LIKE 比较之外,您还需要在哪里进行 varchar 比较? (2认同)

YOU*_*YOU 7

索引不会使查询变慢,数据库大小会变大,所以请继续尝试.

您应该能够在获取行时获得更好的性能,但这取决于您的数据和查询.

  • 需要指出的是,索引*会使插入速度变慢,并且如果它将数据库大小推到您经常访问磁盘的位置,它就会完全破坏性能. (12认同)