2010-07-20 143 views
4

我有一个两部分的PHP脚本。删除后MySQL查询速度慢

  1. 第一即删除数据库
  2. 第二触发SELECT某些行查询

第二脚本单独运行约0.2秒。当两个部分都被处理时,第二部分需要5秒。下一次单独运行第二个脚本时,它会回到0.2秒。

任何线索?

+2

我假设你在该表上的任何索引都在DELETE之后被重建。你能发表SHOW INDEX FROM mytable的结果吗? – twerq 2010-07-20 17:16:52

+0

如果您在删除后等待几秒钟,“SELECT”是否会快速运行?也就是说,运行删除,等待,然后运行select。 – Mike 2010-07-20 17:20:06

+0

实际上有一个索引:一个主键。然而,两部分脚本之间没有等待时间。第二部分运行时索引是否重建?有没有办法在脚本的第二部分之前强制重建索引? – MindTailor 2010-07-20 17:22:27

回答

1

它可能是查询已缓存,所以它运行速度更快第二次,more info here。如果您将SQL_NO_CACHE添加到查询中,那么您应该能够确定缓存是否是一个因素。

+0

我想到了缓存,但似乎一旦查询运行速度很快,另一个运行得更快...... – MindTailor 2010-07-20 17:48:59

0

每次更新表时,您的表的查询缓存都是“无效的”。

结果是,任何对您的表的UPDATE/DELETE/INSERT都将清除该表的查询缓存,并强制为下一个SELECT读取新的磁盘。结果将是一个较慢的查询。

这是链接到MySQL DOCs

如果您的表非常大,您可能需要调查MyISAM表和单独的键缓存,以获得更好的读取性能。 MyISAM =快速读取,快速写入,写入/读取的可怕并发性。 InnoDB =读取速度平庸,写/更新并发性好。

- J Jorgenson -