修改mysql數據引擎的方法- 提高數據庫性能


前言:同學告我說,他為了能使得數據查詢變得快一點,修改的數據引擎,故查詢一下,總結一下。

 

登錄mysql后,查看當前數據庫支持的引擎和默認的數據庫引擎,使用下面命令:

mysql>show engines;

+--------------------+---------+-------------------------------------------------------------------------------------------------------+--------------+------+-------------------+
| Engine             | Support | Comment                                                                                               | Transactions | XA   | Savepoints(保存點) |
+--------------------+---------+-------------------------------------------------------------------------------------------------------+--------------+------+-------------------+
| FEDERATED          | NO      | Federated MySQL storage engine        聯邦MySQL存儲引擎                                                 | NULL         | NULL | NULL              |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables 相同的MyISAM表集合                                                | NO           | NO   | NO                |
| MyISAM             | YES     | MyISAM storage engine                  MyISAM存儲引擎                                                   | NO           | NO   | NO               |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) 空存儲引擎(任何寫入它的內容都消失了)       | NO           | NO   | NO               |
| CSV                | YES     | CSV storage engine                     CSV存儲引擎                       			        | NO           | NO   | NO               |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables 基於散列的,存儲在內存中,用於臨時表              | NO           | NO   | NO               |
| ARCHIVE            | YES     | Archive storage engine                 檔案存儲引擎                                                      | NO           | NO   | NO              |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys 支持事務、行級鎖定和外鍵。                      | YES          | YES  | YES             |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                     性能模式                                                          | NO           | NO   | NO              |
+--------------------+---------+---------------------------------------------------------------------------------------------------------+--------------+------+-----------------+
9 rows in set

 

修改命令:(對單個表修改)  

alter table user ENGINE =MyISAM;

 

修改了好嗎?

查詢資料:
 

1. mysql 中 myisam innodb 的區別有哪些?

 

MyISAM

InnoDB

構成上的區別:

每個MyISAM在磁盤上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型。

.frm文件存儲表定義。

數據文件的擴展名為.MYD (MYData)。

索引文件的擴展名是.MYI (MYIndex)。

基於磁盤的資源是InnoDB表空間數據文件和它的日志文件,InnoDB 表的大小只受限於操作系統文件的大小,一般為 2GB
事務處理上方面:

MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快,但是不提供事務支持

InnoDB提供事務支持事務,外部鍵等高級數據庫功能

SELECT UPDATE,INSERTDelete操作
如果執行大量的SELECT,MyISAM是更好的選擇

1.如果你的數據執行大量的INSERTUPDATE,出於性能方面的考慮,應該使用InnoDB表

2.DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。

3.LOAD TABLE FROM MASTER 操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導入數據后再改成InnoDB表,但是對於使用的額外的InnoDB特性(例如外鍵)的表不適用AUTO_INCREMENT的操作  每表一個AUTO_INCREMEN列的內部處理。

  (AUTO_INCREMENT值可用ALTER TABLE或myisamch來重置)

  (對於AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯合索引,更好和更快的auto_increment處理;)

  (如果你為一個表指定AUTO_INCREMENT列,在數據詞典里的InnoDB表句柄包含一個名為自動增長計數器的計數器,它被用在為該列賦新值。)

4. InnoDB支持事務,MyISAM不支持,對於InnoDB每一條SQL語言都默認封裝成事務,自動提交,這樣會影響速度,所以最好把多條SQL語言放在begin和commit之間,組成一個事務;

5. InnoDB支持外鍵,而MyISAM不支持。對一個包含外鍵的InnoDB表轉為MYISAM會失敗;

6. InnoDB是聚集索引,數據文件是和索引綁在一起的,必須要有主鍵,通過主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到主鍵,然后再通過主鍵查詢到數據。因此,主鍵不應該過大,因為主鍵太大,其他索引也都會很大。而MyISAM是非聚集索引,數據文件是分離的,索引保存的是數據文件的指針。主鍵索引和輔助索引是獨立的。

7. InnoDB不保存表的具體行數,執行select count(*) from table時需要全表掃描。而MyISAM用一個變量保存了整個表的行數,執行上述語句時只需要讀出該變量即可,速度很快;

8. Innodb不支持全文索引,而MyISAM支持全文索引,查詢效率上MyISAM要高;


 

如何選擇:

1. 是否要支持事務,如果要請選擇innodb,如果不需要可以考慮MyISAM;

2. 如果表中絕大多數都只是讀查詢,可以考慮MyISAM,如果既有讀寫也挺頻繁,請使用InnoDB。

3. 系統奔潰后,MyISAM恢復起來更困難,能否接受;

4. MySQL5.5版本開始Innodb已經成為Mysql的默認引擎(之前是MyISAM),說明其優勢是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不會差。


(參考:https://www.zhihu.com/question/20596402/answer/211492971)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM