gpt4 book ai didi

MySQL:复制数据以获得更高性能?

转载 作者:可可西里 更新时间:2023-11-01 07:37:52 25 4
gpt4 key购买 nike

我有一张大表(200'000'000 行);像这样声明

 thread( forum_id tinyint, thread_id int, 
date_first datetime, date_last datetime
replycount mediumint, extra blob )

forum_id 和thread_id 是主键。对于大型论坛(大约一百万个主题),我有时不得不运行诸如 SELECT thread_id FROM thread ORDER BY date_last DESC LIMIT 500000, 10 之类的查询。这些具有巨大偏移量的查询需要一秒钟或几秒钟才能运行。

所以我认为我可以通过复制数据为线程最多的论坛创建一些表格来加快速度。只有少数论坛超过 100'000 个主题,所以会有这样的表格

  thread_for_forumid_123456 ( thread_id int, 
date_first datetime, date_last datetime
replycount mediumint )

你怎么看这件事?它会加速巨大的偏移量查询吗?你还有其他建议吗?谢谢。

最佳答案

首先,我会真的尽量避免你的方法。我将其视为避免性能问题的“最后机会”。

在硬盘上,您有其他选择(从硬件到软件),您可以购买 Fusion i/o 或只是一个 SSD 驱动器 (Raid vs SSD vs FusionIO)。但是,您可以使用软件解决这个问题,根本不用投资。在您的场景中,如果您尚未使用缓存(即 memcached),则应使用它。 MySQL have partitioning ,它不是世界上最好的选择,但是,你可以有一些很好的性能提升。

但是,如果您坚持自己的想法,我建议您分片您的数据,使用一个值将您的数据拆分到多个表中,平衡。您可以做一些令人讨厌的事情,例如:创建 50 个表,例如 thread_0 到 thread_49然后 (forumid % 50) 所以你登陆了这 50 张 table 中的一张。这样就避免了每次创建论坛都创建一个表,也避免了有N个表。而带有 forum_id 索引的 select 会非常快。此外,您可以在应用程序上使用某种逻辑来管理分页,并避免巨大的偏移量

祝你好运!

PS:我在MysqlPerfomanceBlog上添加了一篇博文"Why you dont want to shard"

关于MySQL:复制数据以获得更高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8400643/

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