mysql 刪除索引 簡書 MySQL刪除資料

2021-10-22 03:16:25 字數 1599 閱讀 4085

mysql刪除資料

1.delete

delete from table_name

a.delete屬於資料庫dml操作語言,只刪除資料不刪除表的結構,會走事務,執行時會觸發trigger

b.在 innodb 中,delete其實並不會真的把資料刪除,mysql 實際上只是給刪除的資料打了個標記為已刪除.

因此 delete 刪除表中的資料時,表檔案在磁碟上所佔空間不會變小,儲存空間不會被釋放,只是把刪除的數

據行設定為不可見。雖然未釋放磁碟空間,但是下次插入資料的時候,仍然可以重用這部分空間(重用 → 覆蓋)

c.delete執行時,會先將所刪除資料快取到rollback segement中,事務commit之後生效

d.delete from table_name,對於myisam 會立刻釋放磁碟空間,innodb 不會釋放磁碟空間

e.對於delete from table_name where *** 帶條件的刪除, 不管是innodb還是myisam都不會釋放磁碟空間

f.delete操作以後使用 optimize table table_name 會立刻釋放磁碟空間。不管是innodb還是myisam.所以

要想達到釋放磁碟空間的目的,delete以後執行optimize table 操作

optimize table table_name

g.delete 操作是一行一行執行刪除的,並且同時將該行的的刪除操作日誌記錄在redo和undo表空間中以便進行

回滾(rollback)和重做操作,生成的大量日誌也會占用磁碟空間

2.truncate

truncate table table_name

a.屬於資料庫ddl定義語言,不走事務,原資料不放到 rollback segment 中,操作不觸發 trigger

執行後立即生效,無法找回

b.truncate table table_name 立刻釋放磁碟空間 ,不管是 innodb和myisam.truncate table其實有

點類似於drop table 然後creat,只不過這個create table 的過程做了優化,比如表結構檔案之前已經有了

等等。所以速度上應該是接近drop table的速度

c.truncate能夠快速清空乙個表。並且重置auto_increment的值.

1.對於myisam,truncate會重置auto_increment(自增序列)的值為1。而delete後表仍然保持auto_increment

2.對於innodb,truncate會重置auto_increment的值為1。delete後表仍然保持auto_increment。但是在做delete

整個表之後重啟mysql的話,則重啟後的auto_increment會被置為1

3.drop

drop table tablename

a.屬於資料ddl定義語言,同truncate

b.drop table table_name 立刻釋放磁碟空間 ,不管是 innodb 和 myisam;drop語句將刪除表的結構被依賴的約束(constrain)

觸發器(trigger)、索引(index); 依賴於該錶的儲存過程/函式將保留,但是變為 invalid 狀態

mysql 索引 簡書 MySQL 索引

簡介 索引用於快速找出在某個列中有一特定值的行,不使用索引,mysql必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢資料所花費的時間就越多。如果表中查詢的列有乙個索引,mysql能夠快速到達乙個位置去搜尋資料檔案,而不必檢視所有資料,那麼將會節省很大一部分時間。使用原則 索引底層使用...

mysql索引詳細介紹簡書 Mysql索引介紹

資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢 更新資料庫表中資料。索引的實現通常使用b樹及其變種b 樹。在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法。這種資料結構,就是索引。為表設...

mysql 索引 簡書 MySQL 基礎之索引

mysql 索引 索引索引用於快速查詢具有特定列值的行。如果沒有索引,mysql必須從第一行開始,然後讀取整個表以查詢相關行。表越大,成本越高。如果表中有相關 列的索引,mysql可以快速確定要在資料檔案中間尋找的位置,而無需檢視所有資料。這比按順序讀取每一行要快得多。類似於字典中的目錄,查詢字典內...