我有一个数据库(在MySQL中,使用InnoDB),用于三维图像中的纹理识别。在它中,将有一个包含色调的纹理(纹理像素)表,其形式如下:
texelid INT (PK AI NN)
texelx TINYINT (NN)
texely TINYINT (NN)
texelhue INT (NN)
identifiedtex INT (NN) 标识符是一个标识物与多个纹理(纹理元素)的1:N关系中的外键。
如果我使用texelx、texely和texelhue创建索引(B树),那么我可以快速找到一行。但是,如果我添加identifiedtex作为索引中的最后一列,这会不会加快纹理的查找,因为结果是索引的一部分?正如注意的一样,texelx、texely和texelhue的组合将导致多个标识,需要查找几个不同的行来识别纹理。
我计划通过对同一表(自连接)使用内部连接来识别纹理,以便查找具有匹配X、匹配Y和匹配色调的行,并根据不同的标识物进行分组。
发布于 2013-01-01 02:38:03
根据所提供的信息,我会尝试回答.
你说
如果我添加标识符作为索引中索引的最后一列,这会不会加快纹理的查找,因为结果是索引的一部分?
让我说一下,您有以下查询:
SELECT identifiedtex FROM texels
WHERE texelx = 210938
AND texely = 378432
AND texelhue = 23;拥有一个索引(称为Index3)会产生什么效果?
texelx, texely, texelhue相对于此索引(称为Index4)
texelx, texely, texelhue, identifiedtex 当您仅使用identifiedtex检索Index3时,将需要额外的表查找来确定表中的identifiedtex。
当您仅使用identifiedtex检索Index4时,它将只进行索引查找,因为所有提到的列都在索引中。它被称为覆盖指数。
我在过去的文章中提到了覆盖索引:
Mar 12, 2012:_B级_级别,项目_( id)如何索引此表Oct 17, 2012:索引中的合并列Nov 13, 2012:索引必须覆盖所有选定的列才能用于订单? (见我的结论)因此,要回答您原来的问题,是的,添加identifiedtex将使查询速度更快。
https://dba.stackexchange.com/questions/31258
复制相似问题