Mysql
預設情況下,mysqldump 是否導出索引?
我用 mysqldump 玩了一下,我想知道它是否預設導出索引(
FULLTEXT
,,INDEX
…)。我閱讀了它,發現了這個選項:--disable-keys, -K
這表明它實際上確實導出了索引。但我不想相信我的解釋,我想確保我做對了(或錯了;-))。誰能證實這一點?
不,它不導出索引。將 mysqldump 載入回 mysql 時會重建索引。您找到“–disable-keys”的選項會導致 mysqldump 在通過 INSERT 載入表之前編寫類似這樣的內容:
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 ...
LOCK TABLES 之後的行是
/*!40000 ALTER TABLE `tblAccountLinks` DISABLE KEYS */;
這就是 –disable-keys 選項嵌入 mysqldump 的內容。
此外,這是在所有 INSERT 完成後嵌入的
/*!40000 ALTER TABLE `tblAccountLinks` ENABLE KEYS */; UNLOCK TABLES;
警告 #1
實現 DISABLE KEYS 和 ENABLE KEYS 以在重新載入表時禁用非唯一索引的重新載入。主鍵和唯一鍵未禁用。它們在插入的同時載入。一旦你啟用鍵,非唯一索引將通過排序重建(或使用 MyISAM 鍵記憶體是沒有足夠的可用記憶體)
不幸的是,DISABLE KEYS 和 ENABLE KEYS 僅適用於 MyISAM 表,不適用於 InnoDB。
注意事項 #2
您不必 –disable-keys。您可以使用 –skip-disable-keys 禁用 DISABLE KEYS(沒有雙關語):
-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.)
這可能會導致載入速度變慢,並可能導致非唯一索引的索引頁不平衡。
警告 #3
您可以轉儲實際的 InnoDB 表空間(MySQL 5.5.12)
-Y, --all-tablespaces Dump all the tablespaces. -y, --no-tablespaces Do not dump any tablespace information.