国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL定期分析檢查與優(yōu)化表的方法小結(jié)

2020-01-18 23:13:47
字體:
供稿:網(wǎng)友

定期分析表

ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name]

本語句用于分析和存儲表的關(guān)鍵字分布。在分析期間,使用一個讀取鎖定對表進(jìn)行鎖定。這對于MyISAM, BDB和InnoDB表有作用。對于MyISAM表,本語句與使用myisamchk -a相當(dāng)。

MySQL使用已存儲的關(guān)鍵字分布來決定,當(dāng)您對除常數(shù)以外的對象執(zhí)行聯(lián)合時,表按什么順序進(jìn)行聯(lián)合。

mysql> analyze table a;
+--------+---------+----------+-----------------------------+
| Table  | Op      | Msg_type | Msg_text                    |
+--------+---------+----------+-----------------------------+
| test.a | analyze | status   | Table is already up to date |
+--------+---------+----------+-----------------------------+
1 row in set (0.00 sec)

定期檢查表

CHECK TABLE tbl_name [, tbl_name]  [option]

option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
檢查一個或多個表是否有錯誤。CHECK TABLE對MyISAM和InnoDB表有作用。對于MyISAM表,關(guān)鍵字統(tǒng)計數(shù)據(jù)被更新。

mysql> check table a;
+--------+-------+----------+----------+
| Table  | Op    | Msg_type | Msg_text |
+--------+-------+----------+----------+
| test.a | check | status   | OK       |
+--------+-------+----------+----------+
1 row in set (0.00 sec)
CHECK TABLE也可以檢查視圖是否有錯誤,比如在視圖定義中被引用的表已不存在。
我們?yōu)樯厦娴谋韆創(chuàng)建一個視圖

mysql> create view a_view as select * from a;
Query OK, 0 rows affected (0.02 sec)

然后CHECK一下該視圖,發(fā)現(xiàn)沒有問題

mysql> check table a_view;
+-------------+-------+----------+----------+
| Table       | Op    | Msg_type | Msg_text |
+-------------+-------+----------+----------+
| test.a_view | check | status   | OK       |
+-------------+-------+----------+----------+
1 row in set (0.00 sec)
現(xiàn)在刪掉視圖依賴的表

mysql> drop table a;
Query OK, 0 rows affected (0.01 sec)
再CHECK一下剛才的視圖,發(fā)現(xiàn)報錯了

mysql> check table a_view/G;
*************************** 1. row ***************************
   Table: test.a_view
      Op: check
Msg_type: Error
Msg_text: Table 'test.a' doesn't exist
*************************** 2. row ***************************
   Table: test.a_view
      Op: check
Msg_type: Error
Msg_text: View 'test.a_view' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
*************************** 3. row ***************************
   Table: test.a_view
      Op: check
Msg_type: error
Msg_text: Corrupt
3 rows in set (0.00 sec)

ERROR:
No query specified
定期優(yōu)化表

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name]
如果您已經(jīng)刪除了表的一大部分,或者如果您已經(jīng)對含有可變長度行的表(含有VARCHAR, BLOB或TEXT列的表)進(jìn)行了很多更改,則應(yīng)使用OPTIMIZE TABLE。被刪除的記錄被保持在鏈接清單中,后續(xù)的INSERT操作會重新使用舊的記錄位置。您可以使用OPTIMIZE TABLE來重新利用未使用的空間,并整理數(shù)據(jù)文件的碎片。
在多數(shù)的設(shè)置中,您根本不需要運(yùn)行OPTIMIZE TABLE。即使您對可變長度的行進(jìn)行了大量的更新,您也不需要經(jīng)常運(yùn)行,每周一次或每月一次即可,只對特定的表運(yùn)行。
OPTIMIZE TABLE只對MyISAM, BDB和InnoDB表起作用。
對于MyISAM表,OPTIMIZE TABLE按如下方式操作:
如果表已經(jīng)刪除或分解了行,則修復(fù)表。
如果未對索引頁進(jìn)行分類,則進(jìn)行分類。
如果表的統(tǒng)計數(shù)據(jù)沒有更新(并且通過對索引進(jìn)行分類不能實(shí)現(xiàn)修復(fù)),則進(jìn)行更新。

mysql> OPTIMIZE table a;
+--------+----------+----------+-----------------------------+
| Table  | Op       | Msg_type | Msg_text                    |
+--------+----------+----------+-----------------------------+
| test.a | optimize | status   | Table is already up to date |
+--------+----------+----------+-----------------------------+
1 row in set (0.00 sec)

****
以上某些的段落是直接摘自MySQL的中文手冊,詳細(xì)可以直接查看MySQL的幫助手冊,這里只是簡單指出幾種定期優(yōu)化的方式,需要注意的是無論是ANALYZE,CHECK還是OPTIMIZE在執(zhí)行期間將對表進(jìn)行鎖定,因此請注意這些操作要在數(shù)據(jù)庫不繁忙的時候執(zhí)行

****
參考
《MySQL 5.1參考手冊》

by 陳于

主站蜘蛛池模板: 伊春市| 金阳县| 象州县| 会同县| 贵港市| 康平县| 会泽县| 小金县| 新和县| 石景山区| 抚州市| 炎陵县| 罗定市| 望谟县| 忻城县| 美姑县| 衡水市| 红原县| 汉中市| 永安市| 中宁县| 江西省| 扶风县| 青冈县| 社旗县| 文山县| 青龙| 临桂县| 夏津县| 财经| 长兴县| 镇康县| 武汉市| 博爱县| 唐山市| 天长市| 扶绥县| 华容县| 萍乡市| 潜山县| 白银市|