0

MySQL 5.5.30 でこのクエリの実行が非常に遅いのはなぜですか?:


SELECT message.mid,
       message.sender,
       message.date,
       message.subject,
       message.body,
       message.folder,
       sender.firstname,
       sender.lastname,
       sender.status,
       Group_concat(DISTINCT recipientinfo.rvalue) AS recipientAddresses,
       Group_concat(DISTINCT recipients.lastname)  AS recipientLastNames,
       Group_concat(recipients.status)             AS recipientPositions
FROM   message
       LEFT JOIN employeelist AS sender
              ON message.sender = sender.email_id
       LEFT JOIN recipientinfo
              ON message.mid = recipientinfo.mid
       LEFT JOIN employeelist AS recipients
              ON recipientinfo.rvalue = recipients.email_id
GROUP  BY recipientinfo.mid
ORDER  BY NULL; 

EXPLAINの結果

編集: CREATE TABLE 出力を追加:

| message | CREATE TABLE `message` (
  `mid` int(10) NOT NULL DEFAULT '0',
  `sender` varchar(127) NOT NULL DEFAULT '',
  `date` datetime DEFAULT NULL,
  `message_id` varchar(127) DEFAULT NULL,
  `subject` text,
  `body` text,
  `folder` varchar(127) NOT NULL DEFAULT '',
  PRIMARY KEY (`mid`),
  KEY `sender` (`sender`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |

| employeelist | CREATE TABLE `employeelist` (
  `eid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `firstName` varchar(31) NOT NULL DEFAULT '',
  `lastName` varchar(31) NOT NULL DEFAULT '',
  `Email_id` varchar(31) NOT NULL DEFAULT '',
  `Email2` varchar(31) DEFAULT NULL,
  `Email3` varchar(31) DEFAULT NULL,
  `EMail4` varchar(31) DEFAULT NULL,
  `folder` varchar(31) NOT NULL DEFAULT '',
  `status` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`eid`),
  UNIQUE KEY `Email_id` (`Email_id`),
  KEY `firstName` (`firstName`),
  KEY `lastName` (`lastName`),
  KEY `status` (`status`),
  KEY `Email2` (`Email2`,`Email3`,`EMail4`)
) ENGINE=MyISAM AUTO_INCREMENT=153 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC |

| recipientinfo | CREATE TABLE `recipientinfo` (
  `rid` int(10) NOT NULL DEFAULT '0',
  `mid` int(10) unsigned NOT NULL DEFAULT '0',
  `rtype` enum('TO','CC','BCC') DEFAULT NULL,
  `rvalue` varchar(127) DEFAULT NULL,
  `dater` datetime DEFAULT NULL,
  PRIMARY KEY (`rid`),
  KEY `rvalue` (`rvalue`),
  KEY `mid` (`mid`),
  KEY `rtype` (`rtype`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |

受信者情報テーブルにインデックスを追加しましたが、キーを使用するためにメッセージ テーブルで何をインデックス化すればよいかわかりません。他の情報から、複合インデックスを使用する必要があることがわかりましたが、どのテーブルのどの列を使用しているのでしょうか? 「一時的な使用」はまったく回避できますか?ヒントやヘルプをいただければ幸いです:)

4

0 に答える 0