int类型列的mysql索引

时间:2011-02-06 21:25:45

标签: mysql indexing

如果列的类型为int,是否仍需要编制索引以使选择查询运行得更快?

SELECT * 
  FROM MyTable 
 WHERE intCol = 100;

5 个答案:

答案 0 :(得分:8)

是的,无论数据类型如何,任何列上的索引都可以使查询执行得更快。数据本身就是最重要的 - 如果系统中当前只有两个值,则使用索引没有意义。

还要注意:

  • 索引的存在并不能确保它将被使用 - 表统计信息需要是最新的,但它实际上取决于查询。
  • MySQL每个SELECT只允许一个索引,并且索引的空间有限(limit dependent on engine)。

答案 1 :(得分:4)

可能是的,除非

  • 该表的行数很少(<1000)
  • int列的选择性差
  • 表格的很大一部分被退回(比如说> 1%)

在这种情况下,表扫描可能更有意义,优化器可以选择执行一次。在大多数情况下,无论如何都有一个索引并不是非常有害,但你一定要尝试一下(在你的实验室中,在具有生产类数据集的生产级硬件上)

答案 2 :(得分:2)

是的。列具有哪种数据类型无关紧要。如果您没有指定索引,则只要您使用该列搜索值,mysql就必须扫描整个表。

答案 3 :(得分:0)

是的,索引的重点是你可以通过primary key创建它们,或者手动添加索引。列的类型没有说明查询的速度。

答案 4 :(得分:0)

是的,必须将其编入索引。如果将tinyint列用作布尔值,则对它们进行索引是没有意义的,因为这个索引的选择性不够。