Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Nếu truncate bảng, có cần thêm lại index không?

Nếu bạn truncate một bảng, bạn không cần thêm lại index vì bảng được tạo lại sau khi truncate và các index được thêm tự động.

Tạo bảng demo

mysql> create table DemoTable (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> FirstName varchar(20),
    -> LastName varchar(20)
    -> );
Query OK, 0 rows affected (0.65 sec)

Tạo index

mysql> create index Index_firstName_LastName on DemoTable(FirstName, LastName);
Query OK, 0 rows affected (1.04 sec)
Records: 0 Duplicates: 0 Warnings: 0

Chèn dữ liệu

mysql> insert into DemoTable(FirstName, LastName) values('John', 'Smith');
Query OK, 1 row affected (0.47 sec)

Kiểm tra trạng thái bảng trước khi truncate

mysql> show create table DemoTable;

Kết quả - Có index Index_firstName_LastName

+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table        | Create Table                                                                                                                                                                                                                                                                                                                                                       |
+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| DemoTable    | CREATE TABLE `DemoTable` (`Id` int(11) NOT NULL AUTO_INCREMENT, `FirstName` varchar(20) ..., PRIMARY KEY (`Id`), KEY `Index_firstName_LastName` (`FirstName`,`LastName`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Thực hiện TRUNCATE

mysql> truncate table DemoTable;
Query OK, 0 rows affected (2.01 sec)

Kiểm tra lại trạng thái bảng

mysql> show create table DemoTable;

Kết quả - Index vẫn tồn tại, AUTO_INCREMENT reset về 1

+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table        | Create Table                                                                                                                                                                                                                                                                                                                                       |
+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| DemoTable    | CREATE TABLE `DemoTable` (`Id` int(11) NOT NULL AUTO_INCREMENT, `FirstName` varchar(20) ..., PRIMARY KEY (`Id`), KEY `Index_firstName_LastName` (`FirstName`,`LastName`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Tóm tắt:

  • TRUNCATE TABLE xóa tất cả dữ liệu và reset AUTO_INCREMENT.
  • Cấu trúc bảng (kể cả index, khóa ngoại, ràng buộc) được giữ nguyên.
  • Nhanh hơn DELETE vì không quét từng hàng.
  • Không thể rollback (trừ khi trong transaction với engine hỗ trợ).