我有一张超过150,000行的表,其中大部分都会每天更新。我启用了mysql缓存,因此页面加载速度更快,但每次更新数据库时页面再次加载速度慢,我认为这是缓存构建本身。
所以目前我已经在服务器上执行了wget -m --delete-after http://localhost/
,但这需要大约4个小时才能完成,并且会移动13 gig。
有更好的方法吗?
答案 0 :(得分:4)
MySQL缓存的工作方式不同,具体取决于您使用的是MyISAM存储引擎还是InnoDB存储引擎。
MyISAM仅缓存索引,而不缓存数据。您可以使用LOAD INDEX INTO CACHE
将MyISAM索引预加载到密钥缓冲区缓存中。但如果您使用InnoDB,则没有相应的声明。
InnoDB缓存数据和索引页面。没有专门的命令来预热缓存缓冲区,但是您可以执行一些SQL语句来执行完整的表扫描和完整的索引扫描,以将它们加载到缓冲区中。您应该可以使用服务器上的脚本执行此操作,而无需使用wget
!
我同意@code_burgar的回答:150k行足够小,以至于在缓存预热时你不会注意到性能损失。
如果你在谈论预热Query Cache,那就是另一个问题。您必须使用特定的SQL查询来预热查询缓存,因为该缓存会逐字保存与这些SQL查询关联的结果集。您的wget
解决方案效率低下,可能会重复大量工作。您应该能够通过在服务器上运行脚本来启动查询缓存,该脚本执行您要缓存一次的每个查询。
但您可能需要进行代码审查以确定这些查询的内容,并在代码更改时定期更新缓存预加载脚本。
答案 1 :(得分:1)
就表格大小而言,150,000行真的很小。
您的表格是否已正确编入索引?
您是如何进行更新的,您是在安排和/或限制更新,还是只让它一次性完成?
最有可能发生减速,因为您试图一次更新太多行,而不让服务器喘不过气来。尝试限制更新。