int类型列上的mysql索引

int类型列上的mysql索引,mysql,indexing,Mysql,Indexing,如果列的类型为int,是否仍需要为其编制索引以使select查询运行得更快 SELECT * FROM MyTable WHERE intCol = 100; 是的。列的数据类型并不重要。如果不指定索引,mysql必须在使用该列搜索值时扫描整个表。是的,任何列上的索引都可以使查询执行更快,而不管数据类型如何。数据本身很重要——如果系统中当前只有两个值,那么使用索引就没有意义 还应意识到: 索引的存在并不能保证它会被使用——表的统计数据必须是最新的,但它实际上取决于查询。 MySQL也

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

SELECT * 
  FROM MyTable 
 WHERE intCol = 100;

是的。列的数据类型并不重要。如果不指定索引,mysql必须在使用该列搜索值时扫描整个表。

是的,任何列上的索引都可以使查询执行更快,而不管数据类型如何。数据本身很重要——如果系统中当前只有两个值,那么使用索引就没有意义

还应意识到:

索引的存在并不能保证它会被使用——表的统计数据必须是最新的,但它实际上取决于查询。
MySQL也只允许每个SELECT使用一个索引,并且索引空间有限。
是的,索引的要点是通过主键或手动添加索引来创建索引。列的类型并没有说明查询的速度。

是的,它必须被索引。如果将小列用作布尔值,则索引它们是没有意义的,因为此索引的选择性不够。

可能是,除非

表中只有很少的行1%
在这种情况下,无论如何,表格扫描可能更有意义,而乐观主义者可能会选择这样做。在大多数情况下,无论如何拥有一个索引并不是很有害,但你一定要在你的实验室里试试看,在生产级硬件上,使用类似于生产的数据集

MySQL也只允许每个选择一个索引,并且索引的空间有限-不?!或者我只是误解了你。你想引用一些说明这一点的文档吗?@yankee:当你查看解释计划时,MySQL只能对解释看到的每个语句使用一个索引。例如,子查询将是一个单独的选择。@OMG Ponies:子查询更难处理。但也有类似于连接的东西,其中包含and和or,可能有多个包含多个索引的列。@yankee:JOIN和/或。。。还是一个问题。因此,在一个以上的列上建立一个带警告的复合索引通常是需要考虑的。@OMG Ponies:select foo from bar left join foobar on bar.x=foobar.y,其中bar.z=123如果有问题的所有3列都被索引,我说所有3个索引都将被使用。你有不同的意见吗?据我所知,可能不是关于布尔运算的。看这个:这听起来不太科学。我们可以索引字符串,因为逐个字符验证它肯定需要更多的时间,因此逐行验证是一个On^m_i操作,n是行数,m_i是每个字符串i的字符数。此外,如果我想查找整数,我可以对存储它们的列进行排序。。。如果我没弄错的话,这就是查找表的工作原理?。。。如果我错了,请纠正我