MySQL - 如何避免查询锁定

时间:2011-10-12 11:14:03

标签: mysql locking

我们为我们的mysql数据库使用InnoDB引擎,但由于数据集很大,我们在flat myisam表中聚合数据。我们必须使用myisam,因为我们也使用全文搜索。

通常对平面表的查询速度要快得多,但问题是我们现在必须运行更新脚本来锁定所有搜索查询... ...

我想知道是否有更好的方法来维护搜索表或如何在不锁定其他搜索查询的情况下运行更新脚本。

2 个答案:

答案 0 :(得分:0)

如果你可以负担额外的空间,最简单的选择是在单独的名称下创建新表,然后使用重命名来交换新表。然后你可以放下旧桌子。

或者,您可以考虑Sphinx之类的内容,它会为您索引表格,并为大多数流行语言提供搜索API。

答案 1 :(得分:0)

虽然我认为MySQL很棒,但全文搜索功能(恕我直言)只是一个坏主意。

我看到它应用的唯一地方是实现用户驱动的关键字搜索功能,或者用于绕过设计非常糟糕且未规范化的模式。

它不允许yahoo,google等人提供的搜索功能所需的控制级别。 OTOH实施一种支持控制/灵活性的结构是微不足道的。

关于修复其他地方的错误的螺栓.....你真的应该解决这个错误。

但暂时把它放在一边......

对于MyISAM引擎上的大多数更新,您无法明智地避免锁定表。但是,您可以在块中执行更新,以减少对需要更快访问数据的其他查询的影响。

但是,如果您只更新表中的一小部分行,并且所花费的时间主要是使用非/索引不良的列查找行,那么您可能希望将表的主键选择为然后使用临时表来驱动更新。