Время выполнения путем добавления индекса на MySQL Table - PullRequest
0 голосов
/ 26 октября 2011

Я изменяю индекс для таблицы с более чем 2 миллионами строк.Время выполнения теперь больше 3000 секунд.Я думаю, что что-то не работает на моем компьютере, потому что другие изменения никогда не занимали так много времени за одним столом.Я добавил все индексы с существующими данными.Кто-нибудь знает, сколько времени занимает изменение индекса с 2 миллионами существующих строк?

Как я могу проверить, работает ли что-нибудь нормально в моей локальной установке mysql?определение таблицы:

CREATE TABLE `sal_forwarding` (
  `sid` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `f_shop` INT(11) NOT NULL,
  `f_offer` INT(11) DEFAULT NULL,
  `link` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `offerCode` VARCHAR(255) DEFAULT NULL,
  `sub2` VARCHAR(200) CHARACTER SET latin1 COLLATE latin1_german1_ci DEFAULT NULL,
  `forwardTime` DATETIME NOT NULL,
  `cid` CHAR(32) DEFAULT NULL,
  `f_partner` VARCHAR(20) NOT NULL,
  `t` VARCHAR(30) CHARACTER SET latin1 COLLATE latin1_german1_ci DEFAULT '0',
  `toolbarUser` TINYINT(1) NOT NULL DEFAULT '0',
  `blog` TINYINT(1) DEFAULT '0',
  `clickedPosition` INT(10) UNSIGNED DEFAULT NULL,
  `usedFrame` TINYINT(1) NOT NULL DEFAULT '0',
  `sub3` VARCHAR(200) CHARACTER SET latin1 COLLATE latin1_german1_ci DEFAULT NULL,
  `sub4` VARCHAR(200) CHARACTER SET latin1 COLLATE latin1_german1_ci DEFAULT NULL,
  `sub5` VARCHAR(200) CHARACTER SET latin1 COLLATE latin1_german1_ci DEFAULT NULL,
  `sub6` VARCHAR(200) CHARACTER SET latin1 COLLATE latin1_german1_ci DEFAULT NULL,
  `sub7` VARCHAR(200) CHARACTER SET latin1 COLLATE latin1_german1_ci DEFAULT NULL,
  `f_affiliateId` TINYINT(3) UNSIGNED NOT NULL,
  `browser` VARCHAR(50) DEFAULT NULL,
  `bversion` VARCHAR(5) DEFAULT NULL,
  `os` VARCHAR(50) DEFAULT NULL,
  `forwardDate` DATE NOT NULL,
  PRIMARY KEY (`sid`),
  KEY `f_shop` (`f_shop`,`forwardDate`,`cid`),
  KEY `f_partner` (`f_partner`,`forwardDate`),
  KEY `forwardDate` (`forwardDate`,`cid`),
  KEY `forwardDate_2` (`forwardDate`,`f_shop`),
  KEY `forwardDate_3` (`forwardDate`,`f_shop`,`f_partner`),
  KEY `forwardDate_4` (`forwardDate`,`f_partner`,`cid`),
  KEY `forwardDate_5` (`forwardDate`,`f_affiliateId`),
  KEY `forwardDate_6` (`forwardDate`,`f_shop`,`sid`)
) ENGINE=INNODB AUTO_INCREMENT=10747233 DEFAULT CHARSET=latin1;

Большое спасибо.

1 Ответ

1 голос
/ 26 октября 2011

Создание индекса для большой таблицы - это относительно медленный процесс, и хотя я не эксперт, но я полагаю, что вы ничего не можете сделать в этом отношении.

Время зависит не только от размера таблицы, но также во многом зависит от столбца, по которому создается индекс. 3000 секунд - это нормально, я думаю, для таблицы с 2 миллионами строк я однажды создал составной индекс для таблицы с почти 3,5 миллионами строк, и это заняло более 2 часов .....

Вот несколько ссылок, где люди поделились своим опытом создания индекса для больших таблиц в MySQL

http://lists.mysql.com/mysql/212738

http://forums.mysql.com/read.php?24,356410,356889#msg-356889

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...