Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с вложенными запросами
 
 автор: Proger   (12.08.2008 в 06:58)   письмо автору
 
 

Не понимаю....

есть 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



Индексы индентичны, поля почти не отличаются и в запросе оные не участвуют.

Дамп прикреплён.


В анализе первого запроса индексов меньше почему то используется, но почему НУ НИКАК не пойму :( А количество фото в фотогалерее неуклонно растет, страшно...

  Ответить  
 
 автор: Trianon   (12.08.2008 в 09:42)   письмо автору
 
   для: Proger   (12.08.2008 в 06:58)
 

Потому что в таблицах по-разному расставлены индексы. В дампе видно.

  Ответить  
 
 автор: Proger   (12.08.2008 в 10:19)   письмо автору
 
   для: 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 в 17:52)   письмо автору
 
   для: Proger   (12.08.2008 в 10:19)
 

=((

  Ответить  
 
 автор: Proger   (15.08.2008 в 04:46)   письмо автору
 
   для: Proger   (12.08.2008 в 17:52)
 

Не понял что там отличалось (визуально уже вторую неделю не видно) но я просто удалил все индексы из проблемной базы и sql запросы для создания индексов из нормальной применил к проблемной базе.

Так и не понял что там, но работает, время выполнения почти индентично.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования