web-dev-qa-db-ja.com

mysqldumpはデフォルトでインデックスをエクスポートしますか?

私はmysqldumpを少し試してみましたが、デフォルトでインデックス(FULLTEXTINDEX、...)をエクスポートするかどうか疑問に思いました。私は それについて読む であり、 このオプション を見つけた:

--disable-keys, -K

これは、実際にインデックスをエクスポートすることを示唆しています。しかし、私は自分の解釈を信頼したくありません。正しく解釈したかどうかを確認したいと思います(または間違っています;-))。誰かがそれを確認できますか?

20
Aufwind

いいえ、インデックスはエクスポートされません。インデックスは、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が実装され、テーブルの再読み込み中の一意でないインデックスの再読み込みが無効になりました。主キーと一意キーは無効になりません。これらは、INSERTが行われているときに同時にロードされます。キーを有効にすると、一意でないインデックスが並べ替えによって再構築されます(または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.
16
RolandoMySQLDBA