mysql中OPTIMIZE TABLE的作用

2021-05-28 12:10:49 字數 1359 閱讀 4391

當您的庫中刪除了大量的資料後,您可能會發現資料檔案尺寸並沒有減小。這是因為刪除操作後在資料檔案中留下碎片所致。discuz!在系統數設定介面提供了資料表優化的功能,可以去除刪除操作後留下的資料檔案碎片,減小檔案尺寸,加快未來的讀寫操作。您只要在做完批量刪除,或定期(如每一兩個月)進行一次資料表優化操作即可。

optimizetable通過製作原來的表的乙個臨時副本來工作

optimize table語法

optimize [local |no_write_to_binlog] table tbl_name [, tbl_name] ...

如果您已經刪除了表的一大部分,或者如果您已經對含有可變長度行的表(含有 varchar,blob或text列的表)進行了很多更改,則應使用optimizetable。被刪除的記錄被保持在鏈結清單中,後續的insert操作會重新使用舊的記錄位置。您可以使用optimizetable來重新利用未使用的空間,並整理資料檔案的碎片。

在多數的設定中,您根本不需要執行optimizetable。即使您對可變長度的行進行了大量的更新,您也不需要經常執行,每週一次或每月一次即可,只對特定的表執行。

optimize table只對myisam,bdb和innodb表起作用。

對於myisam表,optimizetable按如下方式操作:

1. 如果表已經刪除或分解了行,則修復表。

2. 如果未對索引頁進行分類,則進行分類。

3. 如果表的統計資料沒有更新(並且通過對索引進行分類不能實現修復),則進行更新。

對於bdb表,optimizetable目前被對映到analyze table上。對於innodb表,optimize table被對映到altertable上,這會重建表。重建操作能更新索引統計資料並釋放成簇索引中的未使用的空間。請參見13.5.2.1節,「analyzetable語法」。

使用—skip-new或—safe-mode選項可以啟動mysqld。通過啟動mysqld,您可以使optimizetable對其它表型別起作用。

注意,在optimizetable執行過程中,mysql會鎖定表。

附註:uchome 的 cleannotification.php計畫任務指令碼

//清理通知

$deltime = $_sglobal['timestamp'] - 2*3600*24;//只保留2天

//執行

$_sglobal['db']->query("delete from".tname('notification')." where dateline <'$deltime' and new='0'");

$_sglobal['db']->query("optimize table".tname('notification'), 'silent');//優化表

php中mysql函式 php中mysql有關函式

1.mysql query 一般是用來查詢資料裡面的資料。如 username post name sql select from members where login name username result mysql query sql 以上程式是檢測資料庫中是否存在表單傳送過來的使用者名稱...

mysql中 變數 mysql中的變數

toc 變數 mysql本質是一種程式語言,需要很多變數來儲存資料。mysql中很多的屬性控制都是通過mysql中固有的變數來實現的。系統變數 系統內部定義的變數,系統變數針對所有使用者 mysql客戶端 有效。檢視系統所有變數 show variables like pattern mysql允許...

mysql中 變數 MYSQL中的變數 MySQL

bitscn.com 只記很基礎的知識,細節東西太麻煩了,而且我也用不到。變數分為使用者變數與系統變數。使用者變數 使用者變數與資料庫連線有關,在這個連線中宣告的變數,在連線斷開的時候,就會消失。在此連線中宣告的變數無法在另一連線中使用。使用者變數的變數名的形式為 varname的形式。名字必須以 ...