两个具有相同行数的相同表上的相同索引但是包含更多列的第二个表是否会影响查找?

时间:2018-06-16 18:00:09

标签: mysql sql

假设有两个表table1table2,其中table1有4列而table2有10列,但table2的前4列与table1相同。 两个表中的第二列表示column2已编入索引。 在按索引搜索时,两个表的查找速度是否相同,或者列数较少(table1)的表的查找速度是否会更快?

1 个答案:

答案 0 :(得分:1)

当where子句如下所示时,通常使用索引查找:

where column2 = <some value>

在这种情况下,表中的列数 - 行的大小应该对性能几乎没有影响。这种查询的工作方式是索引用于标识需要返回的行。此操作阶段仅使用索引,它仅包含列值和行ID。

识别行后,引擎需要在数据页面上查找它们。如果您只有一行,那么记录的大小没有区别。只查找该记录的数据页面(好吧,也可能有一些前瞻性读取,但这也是一样的。)

唯一的潜在差异是多行匹配条件。行越小,它们在单个数据页面上的可能性就越大。但是,如果您的表很大并且只选择了少数几行,那么它们很可能在不同的页面上。

如果表大于可用内存且您正在从表中检索大量行,则可能会出现这种情况。这称为 thrashing ,更可能发生更宽的行(因为它们占用更多空间)。

因此,行的大小基本上对相对性能没有影响,除了如果你有它们的话还带回额外行的开销。