簡體   English   中英

優化mysql數據庫-myISAM數據庫

[英]optimize mysql database - myISAM db

我對使用MyISAM引擎的數據庫的msyql性能有兩個疑問:

1)解決一個表中的某些行INSERT或UPDATE時,許多SELECT查詢掛起的問題的聰明方法是什么。

2)這是容易從MyISAM更改為InnoDB且數據庫當前正在運行嗎?

3)當InnoDB很好時,為什么myISAM仍然是mySQL的默認選項,因為它提供行級鎖定?

4)在設計具有如下視圖的數據庫時遇到一個問題:

  • 我在一張桌子上有很多“職位”。

  • 我想給一個“帖子”一個視圖號,每當人們在網站上查看該帖子時,這個數字就會增加。

  • 因此,如果我將“視圖”字段放在表“帖子”上,則只要訪客訪問此帖子,它將運行查詢“更新帖子設置view = view + 1”。 這使該行上的其他選擇查詢掛起。

  • 如果我將“視圖”字段放在其他表上,我仍然會遇到此問題,因為當我在網站上顯示帖子時,我仍然需要使用內部聯接查詢來獲得該帖子的視圖編號。 而且,如果運行更新視圖查詢,該查詢仍然會卡住。

對不起,我的英語不好。

您已經知道幾乎所有問題的答案,切換到InnoDB

首先檢查您是否獲得了InnoDB支持。 在您的mysql服務器上執行以下查詢:

顯示變量,例如“ have_innodb”;

如果得到的值是“ YES”,則可以使用以下SQL查詢更改要更改的每個表:

ALTER TABLE [tablename] ENGINE = InnoDB;

(先備份)

在將來的版本中,MySQL將切換為InnoDB作為默認存儲引擎。 但是由於遺留設置,這一點沒有改變

Jaydee建議將MyISAM和InnoDB混合使用。 您可以將“視圖”表設為InnoDB表,並且在寫操作期間不應阻止讀取。

或者,您可以在InnoDB中創建主表的副本,對其進行同步(觸發,兩次寫入,如有必要),然后將其切換出。 ALTER TABLE... ,這將減少停機時間,但需要進行更多工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM