获取主键范围内的行

时间:2013-08-23 03:09:51

标签: mysql sql optimization database-design query-optimization

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

无论如何要优化这样的查询或表?可能是我可以存储总是排序的行,这样范围扫描更容易?

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

1 个答案:

答案 0 :(得分:1)

主键列会自动编入索引,因此对范围的访问应该可以很好地执行。使用BETWEEN条件:

select * from mytable
where id between ? and ?

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

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

如有疑问,请在查询上运行EXPLAIN以显示如何进行访问。如果它正在使用索引,那么它可能会尽可能快。