同事们,假设表中有一个字段包含一些数据序列。我需要获取一定数量的较大对象,但按升序排序。我想到的方式是先按降序排序,然后取出一定数量的对象,再按升序排序。像这样的东西:
SELECT * FROM
(SELECT * FROM table_name
ORDER BY field_name DESC
LIMIT 100)
ORDER BY field_name
问题这是唯一最好的方法吗?是否有可能以某种方式立即获取序列的尾部而不是头部?
同事们,假设表中有一个字段包含一些数据序列。我需要获取一定数量的较大对象,但按升序排序。我想到的方式是先按降序排序,然后取出一定数量的对象,再按升序排序。像这样的东西:
SELECT * FROM
(SELECT * FROM table_name
ORDER BY field_name DESC
LIMIT 100)
ORDER BY field_name
问题这是唯一最好的方法吗?是否有可能以某种方式立即获取序列的尾部而不是头部?
还有一个参数
OFFSET,但为了在选择结束时将其设置到正确的位置(表中的记录数减去您在 中指定的值LIMIT),您必须知道表中的确切记录数。好吧,或者做一个子样本来得到它。他们还在文档中写道,使用大的记录
OFFSET是无效的,因为实际上引擎会对所有记录进行排序,直到指定的偏移量:所以事实证明,您的重复排序方法显然是最佳的。
如果您想获取表字段中特定数量的按升序排序的较大对象,可以使用“ORDER BY”语句配合“DESC”(降序)和“LIMIT”来限制显示的记录数。
但是,如果您想直接获取序列的尾部,而不必按降序对它们进行排序,则可以使用升序排序并使用“OFFSET”运算符跳过一些行数。
下面是一个示例: SELECT * FROM table_name ORDER BY field_name ASC OFFSET (total_rows - N) LIMIT N
其中“total_rows”是表中的记录总数,“N”是要检索的对象数(序列的尾部)。
请注意,使用“OFFSET”运算符对于大型表可能无效,因为数据库在检索所需记录之前必须跳过许多行。在这种情况下,建议使用降序排序并使用“LIMIT”限制记录数。
根据具体要求和数据量,最佳方法可能会有所不同。查询性能也会受到索引和表结构的影响。测试不同的选项可以帮助确定适合您的具体情况的最佳解决方案。