2010-09-29 45 views
0

我有我的分貝使用MyISAM引擎msyql性能的兩個問題:優化MySQL數據庫 - 的MyISAM數據庫

1)什麼是解決當插入或更新一些列在一個表中,許多SELECT問題聰明的辦法查詢被掛起。

2)這是很容易從MyISAM的改變與數據庫InnoDB的是當前正在運行的?

3)爲什麼MyISAM的仍然是MySQL的默認選項時的InnoDB是好事,因爲它提供了行級鎖?

4)我有一個問題,當設計圖後的數據庫象下面這樣:

  • 我有一個表有許多「上崗」。

  • 我想給一個「後」視圖號,這增加每個時代的人瀏覽網站上的帖子。因此,如果我將「視圖」字段放在表格「帖子」上,這將在任何時候訪問者訪問此帖子時運行查詢「更新帖子設置視圖=視圖+ 1」。這會使此行上的其他選擇查詢處於掛起狀態。

  • 如果我把「視圖」字段放在其他TABLE上,我仍然會遇到這個問題,因爲當我在網站上顯示帖子時,我仍然需要使用內部聯接查詢來查看此帖子的視圖號。如果有更新視圖查詢運行,這個查詢仍然卡住。

對不起,我的英文不好。

回答

0

你已經知道anwsers幾乎所有你的問題, 切換到InnoDB的

首先檢查,如果你有支持InnoDB。在您的MySQL服務器上執行以下查詢:

SHOW VARIABLES Like'have_innodb';

,如果你得到的 'YES' 你可以改變你想用下面的SQL查詢來改變每一個表中的值:

ALTER TABLE [表名] ENGINE = InnoDB的;

(做一個備份第一)

在未來版本的MySQL會切換到InnoDB的默認存儲引擎。但由於傳統設置的這並沒有改變

+0

問題是我的數據庫現在是太大,不能迅速進行備份。如何使用myISAM和InnoDB,或者使用延遲和低優先級? – 2010-09-29 16:29:08

+0

您可以在一個數據庫中使用不同類型的表,因此可以混合使用MyISAM和InnoDB。當然你只能在innodb表上獲得innodb優勢。 – Jaydee 2010-09-30 08:39:29

+0

你的桌子有多大? – 2010-09-30 10:55:47

0

傑德的MyISAM數據的混合的建議和InnoDB是一個很好的一個。您可以將「視圖」表作爲InnoDB表,並且在寫入期間不應該阻止讀取操作。

或者,你可以在InnoDB中創建您的主表的副本,它們同步,(觸發器,兩個寫,無論是必要的),然後切換出來。這會比ALTER TABLE...減少停機時間,但涉及更多的工作。