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 TABLExó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
DELETEvì không quét từng hàng. - Không thể rollback (trừ khi trong transaction với engine hỗ trợ).