it-swarm.asia

هل يقوم mysqldump بتصدير المؤشرات افتراضيًا؟

لقد لعبت قليلاً مع mysqldump وكنت أتساءل ، إذا كانت تقوم بتصدير المؤشرات (FULLTEXT ، INDEX ، ...) بشكل افتراضي. أنا اقرأها ووجدت هذا الخيار :

--disable-keys, -K

مما يشير إلى أنها تقوم بالفعل بتصدير المؤشرات. لكنني لا أريد أن أثق في تفسيري وأريد أن أتأكد من صحته (أو خطأ ؛-)). يمكن لأي شخص أن يؤكد ذلك؟

20
Aufwind

لا ، لا يتم تصدير الفهارس. تتم إعادة بناء الفهارس عند إعادة تحميل الخلية إلى الخلية. تتسبب الخيارات التي وجدتها "- مفاتيح قابلة للتعطيل" في قيام mysqldump بكتابة شيء من هذا القبيل قبل تحميل الجدول عبر 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 ...

الخط بعد LOCK TABLES

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

هذا ما يشتمل عليه خيار - تعطيل المفاتيح في mysqldump.

أيضا ، هذا مضمن بعد الانتهاء من جميع INSERTs

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

كافيت # 1

تم تنفيذ "مفاتيح تعطيل" و "مفاتيح تمكين" لتعطيل إعادة تحميل الفهارس غير الفريدة أثناء إعادة تحميل جدول. لا يتم تعطيل المفاتيح الأساسية والمفاتيح الفريدة. يتم تحميلها في نفس اللحظة التي يتم فيها إدراج INSERTs. بمجرد تمكين المفاتيح ، تتم إعادة بناء الفهارس غير الفريدة عن طريق الفرز (أو باستخدام ذاكرة التخزين المؤقت لمفتاح MyISAM حيث لا توجد ذاكرة متوفرة كافية)

لسوء الحظ ، تعمل مفاتيح التعطيل والمفاتيح القابلة للتمكين فقط لجداول MyISAM ، وليس InnoDB.

كافيت # 2

لست مضطرًا إلى - تعطيل المفاتيح. يمكنك تعطيل مفاتيح تعطيل (لا يقصد التورية) باستخدام --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.)

قد يؤدي هذا إلى تحميل أبطأ وانحراف محتمل لصفحات الفهرس للفهارس غير الفريدة.

كافيت # 3

يمكنك تفريغ مساحات جداول InnoDB الفعلية (MySQL 5.5.12)

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