Liệu mysqldump xuất khẩu các chỉ số, theo mặc định?


20

Tôi chơi xung quanh một chút với mysqldump và tôi đã tự hỏi, nếu có thì chỉ số xuất khẩu ( FULLTEXT, INDEX, ...) theo mặc định. Tôi đọc nó và tôi thấy tùy chọn này :

--disable-keys, -K

Điều đó cho thấy rằng nó thực sự xuất khẩu các chỉ số. Nhưng tôi không muốn tin vào sự diễn giải của mình và tôi muốn chắc chắn rằng tôi đã hiểu đúng (hoặc sai ;-)). Bất cứ ai có thể xác nhận điều đó?


Hãy làm mới. Tôi đã cập nhật câu trả lời của mình với các trích đoạn mysqldump.
RolandoMySQLDBA

Hãy làm mới. Tôi đã cập nhật câu trả lời của mình với một cảnh báo bổ sung về các phím DISABLE và các phím ENABLE.
RolandoMySQLDBA

Hãy làm mới. Tôi đã cập nhật câu trả lời của mình với một cảnh báo bổ sung về việc bỏ qua các phím DISABLE và đổ các không gian bảng.
RolandoMySQLDBA

Câu hỏi này xứng đáng được +1 vì tôi gần như chắc chắn nhiều người đã có câu hỏi tương tự trong đầu nhưng lại ngại hỏi. Bạn hỏi, bạn được +1!
RolandoMySQLDBA

@RolandoMySQLDBA: Bạn đã nỗ lực rất nhiều trong câu trả lời của mình. Cảm ơn nhiều!!
Aufwind

Câu trả lời:


16

Không, nó không xuất chỉ mục. Các chỉ mục được xây dựng lại khi tải mysqldump trở lại vào mysql. Các tùy chọn bạn đã tìm thấy "--disable-key" khiến mysqldump viết một cái gì đó như thế này trước khi tải bảng thông qua INSERTs:

DROP TABLE IF EXISTS `tblAccountLinks`;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `tblAccountLinks` (
  `ID` int(11) NOT NULL auto_increment,
  `FirmNo` varchar(10) NOT NULL,
  `CustomerNo` varchar(20) NOT NULL,
  `AccountNo` varchar(20) NOT NULL,
  `LinkType` smallint(6) NOT NULL,
  `AccessLevel` smallint(6) NOT NULL,
  `Status` smallint(6) NOT NULL,
  `CreatedOn` datetime NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=27023 DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;

--
-- Dumping data for table `tblAccountLinks`
--

LOCK TABLES `tblAccountLinks` WRITE;
/*!40000 ALTER TABLE `tblAccountLinks` DISABLE KEYS */;
INSERT INTO `tblAccountLinks` VALUES (1,'F0001','C001','T00000001',1,2,1,'2008-06-30 07:55:43'),(2,'
F0001','C001','T00000002',2,2,1,'2008-06-30 07:55:43'),(3,'F0001','C002','27601012',1,2,1,'2008-06-3 ...

Dòng sau LOCK TABLES là

/*!40000 ALTER TABLE `tblAccountLinks` DISABLE KEYS */;

Đây là những gì tùy chọn --disable-key nhúng trong mysqldump.

Ngoài ra, điều này được nhúng sau khi tất cả các CHERTN được thực hiện

/*!40000 ALTER TABLE `tblAccountLinks` ENABLE KEYS */;
UNLOCK TABLES;

CÁCH SỐ 1

Các phím DISABLE và các phím ENABLE đã được triển khai để vô hiệu hóa việc tải lại các chỉ mục nonunique trong khi một bảng đang được tải lại. Khóa chính và Khóa duy nhất không bị tắt. Chúng được tải vào cùng một thời điểm các INSERT đang được. Khi bạn ENABLE KEYS, các chỉ mục nonunique được xây dựng lại thông qua việc sắp xếp (hoặc sử dụng bộ đệm của khóa MyISAM sẽ không có đủ bộ nhớ khả dụng)

Thật không may, các phím DISABLE và các phím ENABLE chỉ hoạt động cho các bảng MyISAM chứ không phải InnoDB.

CÁCH SỐ 2

Bạn không cần phải - phím tắt. Bạn có thể vô hiệu hóa các phím DISABLE (không có ý định chơi chữ) với các phím --skip-vô hiệu hóa:

  -K, --disable-keys  '/*!40000 ALTER TABLE tb_name DISABLE KEYS */; and
                      '/*!40000 ALTER TABLE tb_name ENABLE KEYS */; will be put
                      in the output.
                      (Defaults to on; use --skip-disable-keys to disable.)

Điều này có thể dẫn đến tải chậm hơn và tiềm năng giảm các trang chỉ mục cho các chỉ mục không theo mẫu.

CUỘC SỐ 3

Bạn có thể kết xuất không gian bảng InnoDB thực tế (MySQL 5.5.12)

  -Y, --all-tablespaces 
                      Dump all the tablespaces.
  -y, --no-tablespaces 
                      Do not dump any tablespace information.

1
Xin lưu ý rằng điều này đã lỗi thời, MySQL 5.7 không bao gồm các chỉ mục.
Erica Kane
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.