Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Запрос выполняется очень долго


Автор: Freak_FB 4.3.2010, 12:22
Помогите оптимизировать запрос. Есть в моей базе две таблицы: zameses и rashod. В их назначение вдаваться не будем, обьясню только основные поля.

Таблица zameses:
Код

CREATE TABLE `zameses` (
  `Counter` int(11) NOT NULL auto_increment,
  `RecipeID` int(11) NOT NULL,
  `ZmVolume` float NOT NULL,
  `TS_DateTime` datetime default NULL,
  PRIMARY KEY  (`Counter`),
  KEY `i_zameses` (`Counter`,`RecipeID`,`TS_DateTime`)
) ENGINE=InnoDB AUTO_INCREMENT=1351 DEFAULT CHARSET=utf8


Counter - счетчик, RecipeID - ссылка на запись в parent-таблице, TS_DateTime - уникальный в общем-то штамп времени.


Таблица rashod:
Код

CREATE TABLE `rashod` (
  `Counter` int(11) NOT NULL auto_increment,
  `ZamesID` int(11) default NULL,
  `DzIndex` int(11) NOT NULL default '0',
  `Rashod` float NOT NULL default '0',
  `Zadano` float NOT NULL default '0',
  `TS_DateTime` datetime default NULL,
  PRIMARY KEY  (`Counter`),
  KEY `i_rashod` (`Counter`,`ZamesID`,`TS_DateTime`)
) ENGINE=InnoDB AUTO_INCREMENT=7985 DEFAULT CHARSET=utf8

Counter - счетчик, _Zames ID - ссылка на запись в таблице zameses, TS_DateTime - время.

Мой запрос на удаление:
Код

DELETE zameses.*
  FROM zameses
    LEFT JOIN rashod
      ON zameses.Counter = rashod.ZamesID
  WHERE rashod.ZamesID IS NULL;


Записей в zameses: 1332
Записей в rashod: 7984

Запрос выполняется на моем не шибко навороченном ноутбуке 9 с лишним секунд.

В общем, помогите оптимизировать запрос, или подскажите, может я с индексами напортачил.

Автор: Kesh 4.3.2010, 12:38
Ключ на rashod.ZamesID?

Автор: Freak_FB 4.3.2010, 13:12
Я наверное не особо понимаю ключи. У меня есть составной ключ, где ZamesID фигурирует. Или стоит разбить ключ, и каждое поле в отдельности сделать ключом?


It's a magic  smile 

Ничего не менял, просто добавил ещё один ключ по ZamesID. Запрос сразу стал выполняться на несколько порядков шустрее.

Спасибо за помощь.

P.S.: и всё таки, в моем случае - с ключами что можно сделать, чтобы было более ... нормально?

Автор: Akina 4.3.2010, 14:37
Цитата(Freak_FB @  4.3.2010,  14:12 Найти цитируемый пост)
 в моем случае - с ключами что можно сделать, чтобы было более ... нормально?

В твоём случае, видимо, прочитать документацию по индексированию - что, как и зачем. Причём читать до полного освоения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)