gpt4 book ai didi

mysql - 如何使用 GUID 键对表的数据进行分页

转载 作者:行者123 更新时间:2023-11-30 00:10:42 24 4
gpt4 key购买 nike

我有一个类似于下面的表,其中以 GUID 作为键。我正在尝试使用以 GUID 作为键的分页来显示 tis 的内容,但遇到了如何做到这一点的问题?

CREATE TABLE `planetgeni`.`PostComment` (
`PostCommentId` CHAR(36) DEFAULT NULL,
`UserId` INT NOT NULL,
`CreatedAt` DATETIME NULL DEFAULT NULL ,
.
.
.
PRIMARY KEY (`PostCommentId`)
)
ENGINE=InnoDB DEFAULT CHARSET=latin1;

如果它是一个 Int 键,我的存储过程将如下所示,按 desc 给出接下来的 10 个顺序。但对于 GUID,不知道如何进行这种类型的分页。

getPostComment( int lastPostID)
where PostCommentId< lastPostID order by PostCommentId desc LIMIT 10;

最佳答案

您仍然可以使用 GUID 执行此操作,但由于 GUID 是伪随机的,因此当您 ORDER BY postcommentid 时,顺序可能不是您想要的。您可能需要大约按时间顺序排列的内容,并且当您按随机 GUID 排序时,顺序将是可重复的,但是随机的。

正如@James评论的那样,您可以使用另一列进行排序,但该列必须是唯一的,否则您会错过一些重复的行(如果您使用>)或在下一页上重复值(如果您使用 >=)。

您只需将LIMITOFFSET 结合使用即可。 MySQL 优化了 LIMIT 查询,因此一旦找到页面所需的行,它就会停止检查行。但它还必须检查前面的所有行,因此当您浏览编号较大的页面时,查询会变得更加昂贵。

缓解这种情况的几种方法:

  • 不要让您的用户查看编号较高的页面。绝对不要给他们直接链接到“最后”页面。只需给他们一个指向“下一页”页面的链接,并希望他们在继续前进之前放弃搜索,以免查询成本变得非常高。

  • 一次获取多个页面,并将其缓存。例如,您可以使用 LIMIT 70 代替 LIMIT 10,然后将结果保存在 memcached 或其他内容中。使用应用程序代码一次显示 10 行,直到用户前进到该组行。然后,仅当他们转到第 8 页时,才运行另一个 SQL 查询。用户通常不会搜索多个页面,因此您必须运行第二次或第三次查询的机会变得非常小。

关于mysql - 如何使用 GUID 键对表的数据进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24093286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com