- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有大型 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/
假设一个非常大的数据库。一张有 9 亿条记录的表。 方法一: 表:帖子 +----------+-------------- +------------------+----------------+
我是一名优秀的程序员,十分优秀!