0

我有一个带有客户姓名的发票视图,诸如此类。

这里有几百万行,超过几百个客户。视图速度快如闪电 - 但如果我在客户名称上添加排序,则加载需要一段时间(如 3000 毫秒与 5 毫秒相比)。

该查询将发票连接到客户,然后按客户名称排序,然后按订单号排序。

我明白为什么 - 只是想知道是否有任何技巧可以提高排序速度?

4

1 回答 1

1

您可以在客户 ID/名称上添加索引。

您可以按客户按表分区。

order by将需要很长时间,因为——没有索引——它必须读取所有数据。如果您使用索引或表分区,则无需读取整个表即可获取行。

详细说明索引。有两个考虑。首先是您是选择所有行还是仅选择几行。在大多数情况下,索引肯定有助于缩短返回第一条记录的时间。

第二个考虑是索引是否有助于获取所有记录。这里的问题是选择性。如果发票表中的一个数据页有几百条记录,而客户只有几百个,那么索引将无济于事。平均而言,每个页面都会有每个客户。

如果一个数据页面只有几十张发票,那么平均而言,大约十分之一的页面会有给定的客户发票——瞧,索引会将全表扫描的 I/O 减少一个因子大约 10 个。(还有其他考虑因素,例如预读,但我跳过了这些。)

您没有提供有关系统和表结构的足够信息以获得明确的答案,但索引可能很有用。

于 2013-04-04T01:30:19.403 回答