Тормозит запрос

Fidget

Новичок
Тормозит запрос

Вопрос к пхп гуру...

ни как не врублюсь в чем дело...

круто тормозит запрос:

PHP:
select distinct topw_logoid from tbl_1
      inner join tbl_2 on (tbl_1.topw_logoid=tbl_2.colorfile_previd)
where
      tbl_2.color_size='".$size_id."'
order by
      tbl_1.topw_id desc
limit 12
запрос выполняется где-то 2 секунды.

причем если убрать сортировку:
PHP:
order by 
      logo_color_topweek.topw_id desc
то тормоза пропадают...

В чем тут дело?
 

.des.

Поставил пиво кому надо ;-)
Без http://dev.mysql.com/explain ответить на вопрос очень сложно.
Также хотелось бы знать приблизительный размер таблиц?
 

Fidget

Новичок
Автор оригинала: Кром
На topw_id индекс стоит?
нет не стоит

Автор оригинала: .des.
Без http://dev.mysql.com/explain ответить на вопрос очень сложно.
Также хотелось бы знать приблизительный размер таблиц?
где можно про explain прочитать на русском?
сдела я его, но ничего там не понятно...

Вот что он выдал:
PHP:
*********************************************************************************************************************
* id * select_type * table * type * possible_keys * key  * key_len * ref  * rows  * Extra                           *
*  1 *      SIMPLE * tbl_1 *  ALL * Null          * Null * Null    * Null * 19202 * Using temporary; Using filesort *
*  1 *      SIMPLE * tbl_2 *  ALL * Null          * Null * Null    * Null *  5811 * Using where; Distinct           *
*********************************************************************************************************************
 

.des.

Поставил пиво кому надо ;-)
Ужас.
Cрочно индекс на поля учавствующие в where и в join
tbl_1.topw_logoid, tbl_1.topw_id, tbl_2.colorfile_previd, tbl_2.color_size

PRIMARY KEYS у этих таблиц вообще нет?
Приведите структуру таблиц.
 

Fidget

Новичок
В чем ужас...

можно объяснить?

вот структура таблиц:

tbl_1
PHP:
`topw_id` int(10) NOT NULL auto_increment,
  `topw_date` varchar(10) NOT NULL default '',
  `topw_logoid` int(11) NOT NULL default '0',
  `topw_logotop` int(11) NOT NULL default '0',
  PRIMARY KEY  (`topw_id`),
  KEY `topw_id` (`topw_id`),
  KEY `topw_logoid` (`topw_logoid`)
tbl_2
PHP:
`colorfile_id` int(11) NOT NULL auto_increment,
  `colorfile_previd` int(11) NOT NULL default '0',
  `color_size` int(11) NOT NULL default '0',
  `colorfile_size` int(11) NOT NULL default '0',
  `colorfile_filename` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`colorfile_id`),
  KEY `colorfile_previd` (`colorfile_previd`),
  KEY `color_size` (`color_size`)
 

.des.

Поставил пиво кому надо ;-)
Ну а теперь после создания индексов снова explain.

А в чем ужас - в том что у вас полное декартово произведение
19202*5811 это столько строк надо просмотреть mysql серверу. А в случае с order by еще и отсортировать поэтому и тормозит в случае с order by.

Внимательно еще раз почитайте mysql документацию по поводу оптимизации, использования индексов и что показывает вам команда explain.
Документация по mysql есть и на русском языке.

-~{}~ 06.07.05 01:06:

`topw_date` varchar(10) NOT NULL default '', вы дату как varchar(10) храните? (для даты есть тип date)
 
Сверху