2011-10-12 94 views
1

我們對我們的mysql數據庫使用InnoDB引擎,但由於數據集非常龐大,我們在flat myisam表中彙總數據。我們必須使用myisam,因爲我們也使用全文搜索。MySQL - 如何避免查詢鎖定

一般查詢對平表作爲快很多,但問題是,我們現在有要運行的鎖定長期所有搜索查詢更新腳本....

我不知道是否有更好的方法保持搜索表或如何在不鎖定其他搜索查詢的情況下運行更新腳本。

回答

0

如果您可以承擔額外的空間,最簡單的選擇將是在單獨的名稱下創建新表,然後使用重命名交換新表。然後你可以丟棄舊桌子。

或者,您可能會考慮類似Sphinx這會爲您的表索引,併爲大多數流行語言提供搜索API。

0

儘管我認爲MySQL很棒,但全文搜索功能(恕我直言)只是一個壞主意。

我看到它應用的唯一地方是實現用戶驅動的關鍵字搜索功能或繞過一個非常糟糕的設計和非規範化的模式。

它不允許雅虎,谷歌等提供的那種搜索功能所需的控制級別。 OTOH實施一種結構來支持這種控制/靈活性是微不足道的。

至於在其他地方犯的錯誤修復螺栓......真的,你應該修復這個錯誤。

但留下的是,除了暫時....

你不能理智地避免鎖定在MyISAM引擎的大部分更新的表。但是,您可以以塊的形式執行更新,以降低對其他需要更快訪問數據的查詢的影響。

但是,如果您只更新表中的一小部分行,並且所用的時間主要是使用非/很差索引列來查找行,那麼您可能需要選擇表的主鍵到臨時表中,然後使用它來驅動更新。