假设有两个表table1
和table2
,其中table1
有4列而table2
有10列,但table2
的前4列与table1
相同。
两个表中的第二列表示column2
已编入索引。
在按索引搜索时,两个表的查找速度是否相同,或者列数较少(table1
)的表的查找速度是否会更快?
答案 0 :(得分:1)
当where子句如下所示时,通常使用索引查找:
where column2 = <some value>
在这种情况下,表中的列数 - 行的大小应该对性能几乎没有影响。这种查询的工作方式是索引用于标识需要返回的行。此操作阶段仅使用索引,它仅包含列值和行ID。
识别行后,引擎需要在数据页面上查找它们。如果您只有一行,那么记录的大小没有区别。只查找该记录的数据页面(好吧,也可能有一些前瞻性读取,但这也是一样的。)
唯一的潜在差异是多行匹配条件。行越小,它们在单个数据页面上的可能性就越大。但是,如果您的表很大并且只选择了少数几行,那么它们很可能在不同的页面上。
如果表大于可用内存且您正在从表中检索大量行,则可能会出现这种情况。这称为 thrashing ,更可能发生更宽的行(因为它们占用更多空间)。
因此,行的大小基本上对相对性能没有影响,除了如果你有它们的话还带回额外行的开销。