次のクエリがあります。
SELECT DISTINCT c.id
FROM clients AS c
LEFT JOIN client_project AS cp ON (cp.client_id = c.id)
WHERE cp.project_id = 1
AND c.active_flag = 1
ORDER BY c.client_name
order by を削除すると、クエリに 0.005 秒かかります。order by を使用すると、クエリに 1.8 ~ 1.9 秒かかります。に索引がありますclient_name
。
他に何が速度を改善しますか?
編集: c.id は主キーですが、client_project に複数のレコードが存在する可能性があるため、各 ID に対して複数のレコードが生成される場合があります。また、distinct を削除すると、クエリで 0.1 秒の差が生じます。
追加:これが私のクライアントテーブルです:
CREATE TABLE IF NOT EXISTS `clients` (
`id` int(11) NOT NULL auto_increment,
...
`organization` varchar(255) character set utf8 collate utf8_bin NOT NULL,
`client_name` varchar(255) character set utf8 collate utf8_bin NOT NULL,
`active_flag` tinyint(1) NOT NULL,
...
PRIMARY KEY (`id`),
KEY `active_flag` (`active_flag`),
...
KEY `organization` (`organization`),
KEY `client_name` (`client_name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
MySQL 5.0 の使用