|
|
|
| Не понимаю....
есть 2 запроса:
SELECT cat.id, cat.name, COUNT(apid) AS count, COUNT(DISTINCT album.id) AS alcount
FROM cat
LEFT JOIN album ON album.cid = cat.id AND album.gid = cat.gid
LEFT JOIN photo ON photo.aid = album.id AND photo.gid = album.gid
WHERE cat.gid = 1
GROUP BY cat.id, cat.name
|
Отображает строки 0 - 2 (3 всего, запрос занял 0.5085 сек)
БД photo-memb
Анализ запроса:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE cat ref gid gid 4 const 2 Using where; Using index
1 SIMPLE album ref gid gid 6 const,photo-memb.cat.id 6 Using index
1 SIMPLE photo ref random photo on main page of group random photo on main page of group 4 photo-memb.album.gid 641
|
и
SELECT cat.id, cat.name, COUNT(apid) AS count, COUNT(DISTINCT album.id) AS alcount
FROM cat
LEFT JOIN album ON album.cid = cat.id AND album.gid = cat.gid
LEFT JOIN photo ON photo.aid = album.id AND photo.gid = album.gid
WHERE cat.gid = 3
GROUP BY cat.id, cat.name
|
Отображает строки 0 - 2 (3 всего, запрос занял 0.0279 сек)
БД photo-group
Анализ запроса:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE cat ref gid gid 4 const 2 Using index; Using temporary; Using filesort
1 SIMPLE album ref gid gid 6 const,photo-group.cat.id 5 Using index
1 SIMPLE photo index random photo on main page of group main 12 NULL 949 Using index
|
Индексы индентичны, поля почти не отличаются и в запросе оные не участвуют.
Дамп прикреплён.
В анализе первого запроса индексов меньше почему то используется, но почему НУ НИКАК не пойму :( А количество фото в фотогалерее неуклонно растет, страшно... | |
|
|
|
|
|
|
|
для: Proger
(12.08.2008 в 06:58)
| | Потому что в таблицах по-разному расставлены индексы. В дампе видно. | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2008 в 09:42)
| | хм...
по разному только в 2 местах:
CREATE TABLE `album` (
`id` int(4) NOT NULL,
`gid` int(4) NOT NULL,
`cid` tinyint(3) default NULL,
`name` varchar(50) NOT NULL default 'Без названия',
`desc` varchar(255) default NULL,
`visible` tinyint(1) NOT NULL default '0',
`original` tinyint(1) NOT NULL default '0',
KEY `author` (`name`,`desc`,`visible`),
KEY `gid` (`gid`,`cid`,`id`),
KEY `id` (`id`) //наверное лишний индекс (от отчаянья поставил так сказать)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
|
CREATE TABLE `cat` (
`gid` int(4) NOT NULL,
`id` tinyint(2) NOT NULL,
`name` varchar(50) NOT NULL,
`author` int(4) NOT NULL,
KEY `gid` (`gid`,`id`,`name`),
KEY `author` (`author`) // этот индекс в photo-memb отсутсвует из-за отсутсвия поля author
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
|
Может я слеп? что ещё не так? | |
|
|
|
|
|
|
|
для: Proger
(12.08.2008 в 10:19)
| | =(( | |
|
|
|
|
|
|
|
для: Proger
(12.08.2008 в 17:52)
| | Не понял что там отличалось (визуально уже вторую неделю не видно) но я просто удалил все индексы из проблемной базы и sql запросы для создания индексов из нормальной применил к проблемной базе.
Так и не понял что там, но работает, время выполнения почти индентично. | |
|
|
|