mysql从最后一个抓取到第一个-[许多记录]

nfg76nw0  于 2021-06-21  发布在  Mysql
关注(0)|答案(4)|浏览(212)

我想从mysql获取从最后到第一个限制20的记录。我的数据库有超过一百万条记录。我知道你的命令。但从我的理解,当使用顺序,它需要永远加载20个记录,我没有奇怪的想法。但我想在点菜前把所有的唱片都取出来。

SELECT bookings.created_at, bookings.total_amount,
    passengers.name, passengers.id_number, payments.amount,
    passengers.ticket_no,bookings.phone,bookings.source, 
    bookings.destination,bookings.date_of_travel FROM bookings 
    INNER JOIN passengers ON bookings.booking_id = passengers.booking_id 
    INNER JOIN payments on payments.booking_id = bookings.booking_id 
    ORDER BY bookings.booking_id DESC LIMIT 10
kq4fsx7k

kq4fsx7k1#

您似乎需要另一种解决方法,如物化视图。
如果这听起来像:
创建另一个类似于预订表的表,例如创建类似预订的表。尽管你只需要预订id栏
并检查您的代码,以确定您创建预订订单的确切位置,例如,您第一次插入预订的位置。从booking\u short中选择count(*)。如果大于20,则删除第一条记录。插入新的预订id。
您可以在连接其他表之前从中选择id和join,以了解更多详细信息。
你不需要限制或分类。
当然,这需要大量的文档来避免维护问题。
不是那样就是https://stackoverflow.com/a/5912827/6288442

nmpmafwu

nmpmafwu2#

我想如果执行查询时没有 order by 时间会令人满意吗?
您可以尝试在要排序的列中创建索引: create index idx_bookings_booking_id on bookings(booking_id)

qaxu7uf2

qaxu7uf23#

如果我没弄错的话,索引查找表需要能够驻留在内存中(filesort比mem查找慢得多)。
使用较小的索引/列大小
对于双精度输入,如果不需要负值,请使用无符号列。。
调整排序缓冲区大小和读取缓冲区大小(在连接级别上可能更好,而不是全局)
看到了吗https://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html ,特别是关于使用解释和可能尝试另一个执行计划策略。

xyhw6mcr

xyhw6mcr4#

您可以尝试使用

EXPLAIN  SELECT bookings.created_at, bookings.total_amount,
    passengers.name, passengers.id_number, payments.amount,
    passengers.ticket_no,bookings.phone,bookings.source, 
    bookings.destination,bookings.date_of_travel FROM bookings 
    INNER JOIN passengers ON bookings.booking_id = passengers.booking_id 
    INNER JOIN payments on payments.booking_id = bookings.booking_id 
    ORDER BY bookings.booking_id DESC LIMIT 10

然后检查是否在表上创建了正确的索引

SHOW INDEX FROM `db_name`.`table_name`;

如果索引不存在,则在所有表上创建适当的索引
如果缺什么请加上

相关问题