Mysql中的alter table操作原理

發表于:2013-12-16來源:IT博客大學習作者:Incessant點擊數: 標簽:MySQL
alter table運行時會對原表進行臨時復制,在副本上進行更改,然后刪除原表,再對新表進行重命名。在執行alter table時,其它用戶可以閱讀原表,但是對表的更新和修改的操作將被延遲,直到新表生成為止。

  alter table運行時會對原表進行臨時復制,在副本上進行更改,然后刪除原表,再對新表進行重命名。在執行alter table時,其它用戶可以閱讀原表,但是對表的更新和修改的操作將被延遲,直到新表生成為止。新表生成后,這些更新和修改信息會自動轉移到新表上。

  注意,如果您在執行alter table時使用除了rename以外的選項,則MySQL會創建一個臨時表。即使數據并不需要進行復制(例如當您更改列的名稱時),MySQL也會這么操作。對于Myisam表,您可以通過把myisam_sort_buffer_size系統變量設置到一個較高的值,來加快重新創建索引(該操作是變更過程中速度最慢的一部分)的速度。

  如果您使用alter table tbl_name rename to new_tbl_name并且沒有其它選項,則MySQL只對與table tbl_name相對應的文件進行重命名。不需要創建一個臨時表。

  也就是說我們在執行alter table操作時,會阻塞所有的dml操作,但可以進行select查詢,這個和oracle有很大的不同。

  mysql> select count(*) from test;

  +----------+

  | count(*) |

  +----------+

  | 2097152 |

  +----------+

  1 row in set (2.11 sec)

  mysql> alter table test add c varchar(100);

  Query OK, 2097152 rows affected (1 min 24.02 sec) --用了85s秒左右

  Records: 2097152 Duplicates: 0 Warnings: 0

  mysql> alter table test modify c int;

  Query OK, 2097152 rows affected (1 min 21.69 sec) --用了85s秒左右

  Records: 2097152 Duplicates: 0 Warnings: 0

  mysql> alter table test rename to test_new; --這個操作是直接文件名的,所以很快

  Query OK, 0 rows affected (0.03 sec)

原文轉自:http://blogread.cn/it/article/72

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97