У меня следующий запрос:
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
Если я уберу заказ на, запрос займет 0,005 секунды. При заказе по запросу запрос занимает 1,8-1,9 секунды. У меня есть индекс на client_name
.
Что еще могло бы улучшить скорость?
Редактировать: c.id является первичным ключом, но для него может быть несколько записей в client_project, и поэтому это может привести к более чем одной записи для каждого идентификатора. Кроме того, удаление отличительного составляет 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