最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MYSQL優(yōu)化之?dāng)?shù)據(jù)表碎片整理詳解

 更新時(shí)間:2022年04月02日 10:54:38   作者:劉俊濤的博客  
在日常的數(shù)據(jù)庫(kù)維護(hù)中,在給客戶制定維護(hù)方案時(shí),都會(huì)有降低高水位此類的建議 建議每年年終定期做數(shù)據(jù)整理,下面這篇文章主要給大家介紹了關(guān)于MYSQL優(yōu)化之?dāng)?shù)據(jù)表碎片整理的相關(guān)資料,需要的朋友可以參考下

在MySQL中,我們經(jīng)常會(huì)使用VARCHAR、TEXT、BLOB等可變長(zhǎng)度的文本數(shù)據(jù)類型。不過(guò),當(dāng)我們使用這些數(shù)據(jù)類型之后,我們就不得不做一些額外的工作——MySQL數(shù)據(jù)表碎片整理。

那么,為什么在使用這些數(shù)據(jù)類型之后,我們就要對(duì)MySQL定期進(jìn)行碎片整理呢?

現(xiàn)在,我們先來(lái)看一個(gè)具體的例子。在這里,我們使用如下SQL語(yǔ)句在MySQL自帶的TEST數(shù)據(jù)庫(kù)中創(chuàng)建名為DEMO的數(shù)據(jù)表并插入5條測(cè)試數(shù)據(jù)。

--創(chuàng)建DEMO表
CREATE TABLE DEMO(
id int	unsigned,
body text
) engine=myisam charset=utf8;
												
 
--插入5條測(cè)試數(shù)據(jù)
INSERT INTO DEMO VALUES(1,'AAAAA');
INSERT INTO DEMO VALUES(2,'BBBBB');
INSERT INTO DEMO VALUES(3,'CCCCC');
INSERT INTO DEMO VALUES(4,'DDDDD');
INSERT INTO DEMO VALUES(5,'EEEEE');

然后我們以這5條測(cè)試數(shù)據(jù)為基礎(chǔ),使用如下INSERT INTO語(yǔ)句重復(fù)執(zhí)行多次進(jìn)行復(fù)制性插入。

INSERT INTO DEMO SELECT id, body FROM DEMO;

使用INSERT INTO語(yǔ)句多次插入產(chǎn)生總共約262萬(wàn)條數(shù)據(jù)

眾所周知,MySQL中MyISAM表的數(shù)據(jù)是以文件形式存儲(chǔ)的,我們可以在MySQL存儲(chǔ)數(shù)據(jù)的文件夾中找到數(shù)據(jù)庫(kù)test目錄下的demo.MYD文件。此時(shí),我們可以看到demo.MYD文件的大小約為50MB。

demo.MYD文件約為50MB

此時(shí),假如我們需要?jiǎng)h除DEMO表中所有ID列小于3的數(shù)據(jù)(即1和2),于是我們執(zhí)行如下SQL語(yǔ)句:

DELETE FROM DEMO WHERE id < 3

此時(shí),我們可以看到DEMO表中的數(shù)據(jù)量只有原來(lái)的3/5:

刪除后,只剩下157萬(wàn)條記錄

DEMO表中的現(xiàn)有數(shù)據(jù)量只有原來(lái)的3/5,按理說(shuō),這個(gè)時(shí)候demo.MYD文件的大小也應(yīng)該只有原來(lái)的3/5左右。不過(guò),我們?cè)俅尾榭磀emo.MYD文件時(shí),卻驚奇地發(fā)現(xiàn)該文件的大小一點(diǎn)都沒(méi)有變!

刪除數(shù)據(jù)后,demo.MYD的文件大小沒(méi)有變化

那么就究竟是怎么一回事呢?原來(lái),在MySQL中,如果我們刪除了表中的大量數(shù)據(jù),或者我們對(duì)含有可變長(zhǎng)度文本數(shù)據(jù)類型(VARCHAR,TEXT或BLOB)的表進(jìn)行了很多更改,不過(guò)被刪除的數(shù)據(jù)記錄仍然被保持在MySQL的鏈接清單中,因此數(shù)據(jù)存儲(chǔ)文件的大小并不會(huì)隨著數(shù)據(jù)的刪除而減小。

當(dāng)我們確定數(shù)據(jù)需要被清除掉時(shí),那么這些數(shù)據(jù)就已經(jīng)成了無(wú)用的數(shù)據(jù),但是按照MySQL的處理方式,這些數(shù)據(jù)仍然會(huì)占用我們的磁盤空間,從而造成了極大的資源浪費(fèi)。不僅如此,過(guò)大的數(shù)據(jù)文件還會(huì)導(dǎo)致MySQL執(zhí)行相關(guān)數(shù)據(jù)操作時(shí)需要耗費(fèi)更多的性能和時(shí)間。因此,對(duì)MySQL的某些數(shù)據(jù)表進(jìn)行碎片整理是非常有必要的。

對(duì)MySQL進(jìn)行碎片整理的方法非常簡(jiǎn)單,因?yàn)镸ySQL已經(jīng)給我們提供了對(duì)應(yīng)的SQL指令,這個(gè)SQL指令就是OPTIMIZE TABLE,其完整語(yǔ)法如下:

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE table_name1 [, table_name2] ...

從上面的語(yǔ)法描述中,我們可以得知,OPTIMIZE TABLE可以一次性對(duì)多個(gè)表進(jìn)行碎片整理,只需要在OPTIMIZE TABLE后面接多個(gè)表名,并以英文逗號(hào)隔開(kāi)即可。

此外,OPTIMIZE TABLE語(yǔ)句有兩個(gè)可選的關(guān)鍵字:LOCAL和NO_WRITE_TO_BINLOG。在默認(rèn)情況下,OPTIMIZE TABLE語(yǔ)句將會(huì)被記錄到二進(jìn)制日志中,如果我們指定了LOCAL或NO_WRITE_TO_BINLOG關(guān)鍵字,則不會(huì)記錄。當(dāng)然,一般情況下,我們也無(wú)需關(guān)注這兩個(gè)關(guān)鍵字。

現(xiàn)在,我們就使用OPTIMIZE TABLE語(yǔ)句對(duì)剛才的DEMO表進(jìn)行碎片整理。

對(duì)demo表進(jìn)行碎片整理

然后,我們?cè)賮?lái)查看demo.MYD文件,此時(shí)我們就會(huì)發(fā)現(xiàn)demo.MYD文件的大小已經(jīng)減小到約為原來(lái)的3/5了。

碎片整理后demo.MYD文件的大小

備注:

1.MySQL官方建議不要經(jīng)常(每小時(shí)或每天)進(jìn)行碎片整理,一般根據(jù)實(shí)際情況,只需要每周或者每月整理一次即可。

2.OPTIMIZE TABLE只對(duì)MyISAM,BDB和InnoDB表起作用,尤其是MyISAM表的作用最為明顯。此外,并不是所有表都需要進(jìn)行碎片整理,一般只需要對(duì)包含上述可變長(zhǎng)度的文本數(shù)據(jù)類型的表進(jìn)行整理即可。

3.在OPTIMIZE TABLE運(yùn)行過(guò)程中,MySQL會(huì)鎖定表。

4.默認(rèn)情況下,直接對(duì)InnoDB引擎的數(shù)據(jù)表使用OPTIMIZE TABLE,可能會(huì)顯示「 Table does not support optimize, doing recreate + analyze instead」的提示信息。這個(gè)時(shí)候,我們可以用mysqld --skip-new或者mysqld --safe-mode命令來(lái)重啟MySQL,以便于讓其他引擎支持OPTIMIZE TABLE。

總結(jié)

到此這篇關(guān)于MYSQL優(yōu)化之?dāng)?shù)據(jù)表碎片整理的文章就介紹到這了,更多相關(guān)MYSQL數(shù)據(jù)表碎片整理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解MySQL主從不一致情形與解決方法

    詳解MySQL主從不一致情形與解決方法

    這篇文章主要介紹了詳解MySQL主從不一致情形與解決方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04
  • MySQL中的ALTER EVENT語(yǔ)句的具體使用

    MySQL中的ALTER EVENT語(yǔ)句的具體使用

    EVENT?是一種特殊的數(shù)據(jù)庫(kù)對(duì)象,它允許你在指定的時(shí)間間隔或特定的時(shí)間自動(dòng)執(zhí)行SQL語(yǔ)句或語(yǔ)句集,本文主要介紹了MySQL中的ALTER EVENT語(yǔ)句的具體使用,感興趣的可以了解一下
    2024-07-07
  • MySQL數(shù)據(jù)庫(kù)表約束講解

    MySQL數(shù)據(jù)庫(kù)表約束講解

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)表約束講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • MySql索引原理與操作

    MySql索引原理與操作

    索引是有雙面性的,合理的建立索引可以提高數(shù)據(jù)庫(kù)的效率。但是如果沒(méi)有合理的構(gòu)建索引和使用索引,可能會(huì)導(dǎo)致索引失效或者影響數(shù)據(jù)庫(kù)性能,這篇文章主要介紹了MySql索引原理與操作
    2022-09-09
  • MYSQL的binary解決mysql數(shù)據(jù)大小寫敏感問(wèn)題的方法

    MYSQL的binary解決mysql數(shù)據(jù)大小寫敏感問(wèn)題的方法

    BINARY不是函數(shù),是類型轉(zhuǎn)換運(yùn)算符,它用來(lái)強(qiáng)制它后面的字符串為一個(gè)二進(jìn)制字符串,可以理解為在字符串比較的時(shí)候區(qū)分大小寫
    2013-09-09
  • MySQL——修改root密碼的4種方法(以windows為例)

    MySQL——修改root密碼的4種方法(以windows為例)

    本文以windows為例為大家詳細(xì)介紹下MySQL修改root密碼的4種方法,大家可以可以根據(jù)的自己的情況自由選擇,希望對(duì)大家有所幫助
    2013-07-07
  • 關(guān)于對(duì)mysql語(yǔ)句進(jìn)行監(jiān)控的方法詳解

    關(guān)于對(duì)mysql語(yǔ)句進(jìn)行監(jiān)控的方法詳解

    這篇文章主要給大家介紹了關(guān)于對(duì)mysql語(yǔ)句進(jìn)行監(jiān)控的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Mysql 存儲(chǔ)過(guò)程中使用游標(biāo)循環(huán)讀取臨時(shí)表

    Mysql 存儲(chǔ)過(guò)程中使用游標(biāo)循環(huán)讀取臨時(shí)表

    這篇文章主要介紹了Mysql 存儲(chǔ)過(guò)程中使用游標(biāo)循環(huán)讀取臨時(shí)表的方法,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-12-12
  • MySQL分表和分區(qū)的具體實(shí)現(xiàn)方法

    MySQL分表和分區(qū)的具體實(shí)現(xiàn)方法

    這篇文章主要介紹了MySQL分表和分區(qū)的具體實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Mysql中having與where的區(qū)別小結(jié)

    Mysql中having與where的區(qū)別小結(jié)

    本文主要介紹了MySQL中WHERE和HAVING子句的區(qū)別,包括它們的執(zhí)行順序、效率、適用條件和在多表關(guān)聯(lián)查詢中的應(yīng)用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03

最新評(píng)論

绥江县| 正阳县| 宁陕县| 赤城县| 波密县| 明溪县| 四子王旗| 上林县| 离岛区| 桂阳县| 隆子县| 宁德市| 老河口市| 朝阳县| 英超| 蓬莱市| 汝南县| 莱西市| 蒙自县| 班戈县| 梁山县| 灵山县| 康马县| 苏尼特右旗| 土默特右旗| 高唐县| 山东省| 冀州市| 新蔡县| 克东县| 壤塘县| 凌云县| 韩城市| 承德县| 宜丰县| 融水| 英山县| 游戏| 苏尼特右旗| 石屏县| 富民县|