


How to solve the problem that the mysql delete operation is actually a fake deletion
mysql deletion operation is actually a fake deletion
In InnoDB, your delete operation will not actually delete the data. Mysql actually just marks the deleted data as deleted. , so if you use delete to delete the data in the table, the space occupied by the table file on the disk will not become smaller. We will call it false deletion for the time being.
We can verify it through an example
Let’s follow the example in the previous article. First create a stored procedure, insert 100,000 pieces of data, and then see how much of the 100,000 pieces of data occupy space.
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
You can see that 100,000 pieces of data occupy 3.52M of space in mysql. Then we execute the delete command delete from t and take a look.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
It can be found from the results that after the table data is cleared, the space occupied by the table does not change. This verifies the above conclusion. The delete operation does not actually delete the data, and the space of the table is not released.
These deleted record rows are only marked for deletion and can be reused. Next time a record that meets the conditions can be directly inserted into this marked position.
For example, if we delete a record with id=500 among the records with id between 300-600, this record will be marked for deletion. If there is a record with id=400 to be inserted next time Come in, then you can reuse the location marked for deletion with id=500. This situation is called line record reuse.
Another situation is data page reuse, which means that the entire data page has been marked and deleted, so the entire data page can be reused, along with row records. The difference is that data page reuse has almost no restrictions on the data to be inserted.
Taking the above insertion as an example, if the record to be inserted is id=1000, then the position id=500 cannot be reused, but if there is an entire data page that can be reused, then regardless of the id Any value can be reused on this page.
These records that have been marked for deletion are actually a hole. They feel like they are occupying a manhole and not taking a shit. Not only is it a waste of space, but it will also affect the query efficiency.
Because you have to know that mysql stores and reads data in units of data pages at the bottom layer. Every time you read data from the disk, you read a data page. However, every time you access a data page, you need to read it once. Disk IO operations, disk IO is quite slow compared to memory access speed.
So think about it, if there are a large number of data holes in a table, the data that originally only needs one data page to save will have to be saved by adding other data pages due to the space occupied by many holes. Data, accordingly, when mysql queries the same data, it has to increase disk IO operations, thus affecting the query speed.
In fact, not only deletion operations will cause data holes, but insertions and updates will also cause holes. I won’t go into details here, just know it.
Therefore, after a data table undergoes a large number of frequent additions, deletions and modifications, it is inevitable that data holes will occur, wasting space and affecting query efficiency. Usually in a production environment, this will directly manifest itself as the originally fast query will become Slower and slower.
In this case, we can usually use the following command to solve the data hole problem.
1 |
|
The principle of this command is to rebuild the table, which is to create a temporary table B, then query all the data in table A (the table with data holes), and then reinsert all the data into temporary table B , and finally replace table A with temporary table B. This is the process of rebuilding the table.
Let’s try it again.
Look at the effect
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
You can see that the table file size has become 0.02M, indicating that the table space has been released. This 0.02M should be the size of the file that defines the table structure.
In addition, the following command can also be used to rebuild the table, which can achieve the same effect as above. It is recommended that you use the following command. You can try it.
1 |
|
Note that the content of this article is based on the InnoDB engine, and there may be some differences for other engines.
The above is the detailed content of How to solve the problem that the mysql delete operation is actually a fake deletion. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



In MySQL database, the relationship between the user and the database is defined by permissions and tables. The user has a username and password to access the database. Permissions are granted through the GRANT command, while the table is created by the CREATE TABLE command. To establish a relationship between a user and a database, you need to create a database, create a user, and then grant permissions.

MySQL is suitable for beginners because it is simple to install, powerful and easy to manage data. 1. Simple installation and configuration, suitable for a variety of operating systems. 2. Support basic operations such as creating databases and tables, inserting, querying, updating and deleting data. 3. Provide advanced functions such as JOIN operations and subqueries. 4. Performance can be improved through indexing, query optimization and table partitioning. 5. Support backup, recovery and security measures to ensure data security and consistency.

Data Integration Simplification: AmazonRDSMySQL and Redshift's zero ETL integration Efficient data integration is at the heart of a data-driven organization. Traditional ETL (extract, convert, load) processes are complex and time-consuming, especially when integrating databases (such as AmazonRDSMySQL) with data warehouses (such as Redshift). However, AWS provides zero ETL integration solutions that have completely changed this situation, providing a simplified, near-real-time solution for data migration from RDSMySQL to Redshift. This article will dive into RDSMySQL zero ETL integration with Redshift, explaining how it works and the advantages it brings to data engineers and developers.

To fill in the MySQL username and password: 1. Determine the username and password; 2. Connect to the database; 3. Use the username and password to execute queries and commands.

1. Use the correct index to speed up data retrieval by reducing the amount of data scanned select*frommployeeswherelast_name='smith'; if you look up a column of a table multiple times, create an index for that column. If you or your app needs data from multiple columns according to the criteria, create a composite index 2. Avoid select * only those required columns, if you select all unwanted columns, this will only consume more server memory and cause the server to slow down at high load or frequency times For example, your table contains columns such as created_at and updated_at and timestamps, and then avoid selecting * because they do not require inefficient query se

Navicat itself does not store the database password, and can only retrieve the encrypted password. Solution: 1. Check the password manager; 2. Check Navicat's "Remember Password" function; 3. Reset the database password; 4. Contact the database administrator.

Detailed explanation of database ACID attributes ACID attributes are a set of rules to ensure the reliability and consistency of database transactions. They define how database systems handle transactions, and ensure data integrity and accuracy even in case of system crashes, power interruptions, or multiple users concurrent access. ACID Attribute Overview Atomicity: A transaction is regarded as an indivisible unit. Any part fails, the entire transaction is rolled back, and the database does not retain any changes. For example, if a bank transfer is deducted from one account but not increased to another, the entire operation is revoked. begintransaction; updateaccountssetbalance=balance-100wh

SQLLIMIT clause: Control the number of rows in query results. The LIMIT clause in SQL is used to limit the number of rows returned by the query. This is very useful when processing large data sets, paginated displays and test data, and can effectively improve query efficiency. Basic syntax of syntax: SELECTcolumn1,column2,...FROMtable_nameLIMITnumber_of_rows;number_of_rows: Specify the number of rows returned. Syntax with offset: SELECTcolumn1,column2,...FROMtable_nameLIMIToffset,number_of_rows;offset: Skip
