是否有可能在重负载下对大表(可能是十亿行)进行范围扫描,以获取范围范围内主键的所有行。主键是BIGINT
类型。除了主键之外,行只是另一个INT
字段。仅对此表执行此类查询。
无论如何要优化这样的查询或表?可能是我可以存储总是排序的行,这样范围扫描更容易?
是否有可能在大桌面上以良好的性能进行此类查询?
答案 0 :(得分:1)
主键列会自动编入索引,因此对范围的访问应该可以很好地执行。使用BETWEEN
条件:
select * from mytable
where id between ? and ?
当然,如果范围很大,由于返回的行数很多,性能会很慢。
此外,如果范围的大小超出某个限制(优化器将决定,但通常是总行数的1/11),则不会使用索引,而是完成全部扫描,因为它实际上是如果访问的行的百分比足够大,则比使用索引更快。
如有疑问,请在查询上运行EXPLAIN
以显示如何进行访问。如果它正在使用索引,那么它可能会尽可能快。