it-swarm-eu.dev

Exportuje index mysqldump ve výchozím nastavení?

Trochu jsem si hrál s mysqldump a přemýšlel jsem, jestli to ve výchozím nastavení exportuje indexy (FULLTEXT, INDEX, ...). Já přečtěte si to a našel jsem tato možnost :

--disable-keys, -K

což naznačuje, že skutečně indexy exportuje. Ale nechci věřit své interpretaci a chci se ujistit, že to mám pravdu (nebo špatně ;-)). Může to někdo potvrdit?

20
Aufwind

Ne, neexportuje indexy. Indexy se znovu vytvoří po načtení mysqldump zpět do mysql. Možnosti, které jste našli „--disable-keys“, způsobí, že mysqldump něco napíše před načtením tabulky pomocí 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 ...

Řádek za LOCK TABLES je

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

To je to, co volba --disable-keys vloží do mysqldump.

Také je to vloženo po dokončení všech VLOŽEK

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

CAVEAT # 1

DISABLE KEYS a ENABLE KEYS byly implementovány tak, aby zakázaly opakované načítání nonunique indexů, zatímco se obnovuje tabulka. Primární klíče a jedinečné klíče nejsou deaktivovány. Jsou načteny ve stejnou chvíli, ve které jsou VLOŽKY. Jakmile ENABLE KEYS, nonunique indexy jsou znovu sestaveny tříděním (nebo pomocí mezipaměti MyISAM není dostatek dostupné paměti)

Bohužel funkce DISABLE KEYS a ENABLE KEYS funguje pouze pro tabulky MyISAM, ne pro InnoDB.

CAVEAT # 2

Nemusíte --disable-keys. Mohli byste je zakázat ZAKÁZAT KEYS (není určena žádná hříčka) pomocí --skip-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.)

To by mohlo mít za následek pomalejší načtení a potenciální posunutí indexových stránek pro neunikové indexy.

CAVEAT # 3

Můžete vypsat skutečné tabulkové prostory InnoDB (MySQL 5.5.12)

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