[英]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.