【问题标题】:Does index on Varchar make performance difference?Varchar 上的索引是否会产生性能差异?
【发布时间】:2010-12-26 06:55:18
【问题描述】:

varchar 列上的索引是否会使查询运行速度变慢? 我可以使它成为int。而且我不需要进行 LIKE % 比较。

【问题讨论】:

  • 如何展示示例查询来说明您的意思?
  • "slower" 没有可比较的东西是没有意义的。您是在问 VARCHAR 是否比 INT 慢,还是索引 VARCHAR 是否比非索引慢?
  • 我不明白。如果您存储的数据是 int,那么列类型必须是 int,您将索引该列。如果数据是 varchar,那么您的列类型是 varchar

标签: mysql sql performance indexing varchar


【解决方案1】:

varchar 列上的索引是否会使查询运行速度变慢?

不,它没有。
如果优化器决定使用索引,查询将运行得更快。该表上的INSERTs/UPDATEs/DELETEs 会慢一些,但不太可能引起注意。

我不需要进行 LIKE % 比较

注意使用:

LIKE '%whatever%'

...将使用索引,但以下将:

LIKE 'whatever%'

键是字符串左侧的通配符意味着不能使用列上的索引。

还知道MySQL limits the amount of space set aside for indexes - 对于 MyISAM(对于 InnoDB)表,它们最长可达 1000 字节(对于 InnoDB 为 767 字节)。

【讨论】:

  • 谢谢,我不知道删除左通配符会使用索引。我没想到通配符根本不受支持。
【解决方案2】:

如果您可以用整数替换您的 varchar 列(我认为这是您所暗示的),那么由于某些原因,包含整数列的索引将比 varchar 列执行得更好。

  1. 索引大小会更小,涉及的分页更少。
  2. 整数的比较比varchar好很多。

【讨论】:

  • 关于第 2 点 -> 如果您对 varchar 进行了索引,除了投票最多的答案中所述的 LIKE 比较之外,您还需要在哪里进行比较?
  • 第二点太不真实了。当您索引 varchar 时,它真正成为数据库引擎的 INT,唯一的开销是索引扫描
【解决方案3】:

索引不会让您的查询变得更慢。如果您可以将列设为 int 类型,我建议您这样做,因为大多数 RDBMS 可以比 varchars 更快地搜索 int

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • 需要指出的是,索引确实会使插入变慢,如果它将数据库大小推高到您经常遇到的点,它会完全降低性能磁盘。
    猜你喜欢
    • 2012-05-12
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 2010-09-24
    • 2012-07-15
    • 2020-02-12
    • 2010-12-27
    相关资源
    最近更新 更多