0

是否可以在重负载下有效地对大表(可能是十亿行)进行范围扫描,以获取具有范围内主键的所有行。主键是BIGINT类型。行非常短,只是INT主键之外的另一个字段。仅对该表执行这种类型的查询。

无论如何要优化此类查询或表?可能我可以存储始终排序的行,以便范围扫描更容易?

是否有可能在大表上以良好的性能进行此类查询?

4

1 回答 1

1

主键列是自动索引的,因此对范围的访问应该执行得非常好。使用BETWEEN条件:

select * from mytable
where id between ? and ?

当然,如果范围很大,由于返回的行数很大,性能会很慢。

此外,如果范围的大小超出某个限制(优化器将决定,但通常是总行数的 1/11),则不会使用索引,而是会进行完整的故事扫描,因为它实际上比使用更快如果被访问的行的百分比足够大,则为索引。

如有疑问,EXPLAIN请在查询上运行以显示访问是如何完成的。如果它使用索引,它可能会尽可能快。

于 2013-08-23T04:10:50.573 回答