0

我在 MyISAM 数据库上运行了大约 50,000 个查询,但是查询运行的时间越长,它变得越慢。例如,一开始可以在一秒钟内完成 20 行,到最后它是每秒完成 5 行。发生这种情况是因为 MyISAM 在每次插入后锁定表还是其他原因?

我想我必须使用 MyISAM,因为我正在使用带有全文索引的 match()against(),据我所知只有 MyISAM 支持。是否可以使用具有此功能的 InnoDB 或其他一些 DB 类型,或者是否有办法加快查询,因为当前查询的执行时间约为 45 分钟。

我预计会有很多关于我的查询结构的答案,我将三个具有不同列的表整理到一个表中,并尝试将 3 个不同的行匹配在一起以形成一个“超级表”,因此我需要做很多匹配( )against()、preg_match、选择和循环以准确匹配它们。为了优化我的循环,我使用 PDO 和准备好的语句,但这只会将查询时间缩短到我上面提到的时间,使用 mysql_connect 和标准函数接近一个小时。

请记住,查询一开始并不慢,只有在完成大约 10,000 次查询之后,它才会明显变慢,并且随着它做的更多,它变得越来越慢,直到它达到任何服务器公司接受的不合理水平,谁能给我一个解法?

4

2 回答 2

0

我的建议是尝试更新您的 MySQL,

如果你有很多编写 MySQL -V 5.6+ 允许你在 InnoDB 表中使用全文索引,除此之外 Innodb 允许你锁定行,这是一件大事。

您也可以尝试修复索引,ANALIZE这可能有助于提高性能

于 2012-07-05T20:41:50.363 回答
0

MySQL 全文搜索无法通过设计有效地处理大数据。大多数情况下,从 MyISAM 切换到 InnoDB 是个好主意,因为它有助于提高非 FT 查询的性能和并发性,并且在 InnoDB 支持事务时保证数据安全,但不会大大提高 FT 查询速度(根据 Percona 的基准http://bit.ly/M6DMsj)。

我建议将全文查询移出 MySQL。在这种情况下,任何外部搜索引擎(如 Solr 或 Sphinx)都会非常有用。

我不是 Solr 的专家,但如果您决定使用 Sphinx,您可以使用http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/作为指南初始配置。

希望这可以帮助。

于 2012-07-07T04:36:22.277 回答