gpt4 book ai didi

mysql - 一张大表 vs 大表 + 缓存表

转载 作者:行者123 更新时间:2023-11-29 13:11:21 25 4
gpt4 key购买 nike

我有大型 MySQL 表(200K+ 条记录)。从这个表中,我主要读取最后 +-1000 条记录。我每天向该表插入大约 500 条记录。我的问题。我应该使用这个表并从中读取数据,还是应该使用一个较小的表作为缓存。

我的缓存表的含义:每次插入表都会启动触发器,将数据复制到“缓存”表并删除旧数据(以将大小保持在范围内)最多 1000 条记录)。现在,如果我读到一些内容,我主要在“缓存”中搜索“最后条目记录”。用户是否想要读取“存档”数据,我从表中读取。

这是一个好的解决方案吗?运行触发器并从缓存表中删除会影响性能吗?或者..会有什么不同吗?

我主要运行的 SQL 查询包括 SELECT有两个JOIN s 和范围内的搜索结果(使用 HAVING 子句)。我正在使用 MyISAM DB 引擎。

最佳答案

您可以自己检查 - 创建第二个表,使用

create table cache as select * from orig_table order by insertiontime desc limit 1000

然后将与原始表相同的索引添加到缓存表中,并对原始表进行一些选择,并对缓存表进行相同的选择。测量每种情况的时间。

如果你有适当的索引,并且你的结果集大小是相同的(即你没有从原始表中选择缓存表没有的所有旧记录),那么时间差不应该更大比百分之几。

analyze table 可能会有所帮助每天一次,以防止 mysql 产生有关 key 分配的奇怪想法并使用次优的连接顺序。

如果您想排除无法阻止原始联接选择的旧记录,您可能需要阅读 partitioning ,它与您的缓存想法类似,但在数据库引擎中实现。

关于mysql - 一张大表 vs 大表 + 缓存表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22050482/

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