SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 13.07.2011 11:45:59

denomi3
Участник
Зарегистрирован: 13.07.2011
Сообщений: 1

Не работают индексы при объединении выборок из таблиц

Есть две таблицы:

CREATE TABLE gprom_yud_dbo.node (
  ID_NODE INT(10) NOT NULL,
  ID_PARENT INT(10) DEFAULT NULL,
  ID_ITEMTYPE INT(10) NOT NULL DEFAULT 0,
  N_ORDER INT(10) NOT NULL DEFAULT 0,
  STR_LABEL VARCHAR(256) NOT NULL,
  DATE_LAST DATETIME DEFAULT NULL,
  DATE_CREATE DATETIME DEFAULT NULL,
  ID_USER INT(10) NOT NULL,
  ID_OLDPARENT INT(10) DEFAULT NULL,
  N_MODE INT(10) DEFAULT NULL,
  LINK_COUNTER INT(10) NOT NULL DEFAULT 0,
  PRIMARY KEY (ID_NODE),
  INDEX NODE_PARENT USING BTREE (ID_PARENT),
  INDEX FK_ITEMTYPE_NODE USING BTREE (ID_ITEMTYPE),
  INDEX FK_USER_NODE USING BTREE (ID_USER),
  CONSTRAINT FK_ITEMTYPE_NODE FOREIGN KEY (ID_ITEMTYPE)
    REFERENCES gprom_yud_dbo.itemtypes(ID) ON DELETE NO ON UPDATE NO,
  CONSTRAINT FK_PARENT_NODE FOREIGN KEY (ID_PARENT)
    REFERENCES gprom_yud_dbo.node(ID_NODE) ON DELETE NO ON UPDATE NO,
  CONSTRAINT FK_USER_NODE FOREIGN KEY (ID_USER)
    REFERENCES gprom_yud_dbo.users(ID_USER) ON DELETE NO ON UPDATE NO
)
ENGINE = INNODB
CHARACTER SET utf8
COLLATE utf8_general_ci;

и

CREATE TABLE gprom_yud_dbo.attrval_char (
  ID_NODE INT(10) NOT NULL,
  ID_ATTR INT(10) NOT NULL,
  CHAR_VALUE VARCHAR(255) NOT NULL,
  PRIMARY KEY (ID_NODE, ID_ATTR),
  INDEX FK_ATTRVAL_CHAR_ATTRS USING BTREE (ID_ATTR),
  INDEX IX_ATTRVAL_CHAR USING BTREE (CHAR_VALUE(191)),
  CONSTRAINT FK_ATTRVAL_CHAR_ATTRS FOREIGN KEY (ID_ATTR)
    REFERENCES gprom_yud_dbo.attrs(ID_ATTR) ON DELETE NO ON UPDATE NO,
  CONSTRAINT FK_ATTRVAL_CHAR_NODE FOREIGN KEY (ID_NODE)
    REFERENCES gprom_yud_dbo.node(ID_NODE) ON DELETE NO ON UPDATE NO
)
ENGINE = INNODB
CHARACTER SET utf8
COLLATE utf8_general_ci;

Такой запрос на 250 000 записей выполняется порядка 6 секунд что неприелемо:
SELECT  P1.A2 AS COL1
FROM
  NODE N INNER JOIN
  (SELECT
    N.ID_NODE, T.CHAR_VALUE AS A2
  FROM
    NODE N
    LEFT OUTER JOIN ATTRVAL_CHAR T ON N.ID_NODE = T.ID_NODE AND T.ID_ATTR = 1805) P1
  ON N.ID_NODE = P1.ID_NODE

EXPLAIN показывает вот что (скрин). На сколько я понял проблема в том что при объединении выборки P1 c NODE не используется индекс P1.ID_NODE. Буду признателен если кто то подскажет как можно решить проблему...


Прикрепленные файлы:
Attachment Icon Снимок.JPG, Размер: 39,307 байт, Скачано: 478

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson