результат explain

LONGMAN

Dark Side of the Moon..
результат explain

PHP:
EXPLAIN SELECT * FROM room0 WHERE (`usid` = '1')OR(`towhom` = '1')OR(`towhom` = '') ORDER BY `id` DESC LIMIT 0,20
результат:
id: 1
select_type: SIMPLE
table: room0
type: index
possible_keys: usid
key: PRIMARY
key_len: 4
ref:
rows: 7585
Extra: Using where
- - -
это значит что он будет перебирать 7585 записеи?
INDEX есть на id (PRIMARY) и usid, towhom (multiple)
 

pilot911

Новичок
перепиши запрос так


EXPLAIN SELECT * FROM room0 FORCE INDEX(usid, towhom) WHERE (`usid` = '1')OR(`towhom` = '1')OR(`towhom` = '') ORDER BY `id` DESC LIMIT 0,20
 

findnext

Новичок
ну или разбей составной индекс на 2, когда делаешь индексы нужно думать какие запросы будут использоваться
 

LONGMAN

Dark Side of the Moon..
Автор оригинала: pilot911
перепиши запрос так


EXPLAIN SELECT * FROM room0 FORCE INDEX(usid, towhom) WHERE (`usid` = '1')OR(`towhom` = '1')OR(`towhom` = '') ORDER BY `id` DESC LIMIT 0,20
пишет Key 'towhom' doesn't exist in table 'room0'

-~{}~ 14.09.09 15:09:

Автор оригинала: findnext
ну или разбей составной индекс на 2, когда делаешь индексы нужно думать какие запросы будут использоваться
запросы есть только такие какой я и написал выше
 

findnext

Новичок
LONGMAN
пишет что нет такого индекса. Подсказка - создать индекс towhom

-~{}~ 14.09.09 14:23:

сделай отдельно towhom и usid
 

LONGMAN

Dark Side of the Moon..
findnext
сделал. сейчас EXPLAIN пишет:
id: 1
select_type: SIMPLE
table: room0
type: index_merge
possible_keys: usid,towhom
key: usid,towhom
key_len: 4,4
ref:
rows: 3726
Extra: Using sort_union(usid,towhom); Using where; Using filesort

так лучше?
 

pilot911

Новичок
сравнивай так

SELECT SQL_NO_CACHE * FROM room0 WHERE (`usid` = '1')OR(`towhom` = '1')OR(`towhom` = '') ORDER BY `id` DESC LIMIT 0,20

то есть отключай кэширование запроса

ПС. создай составной индекс по двум полям usid и towhom
 
Сверху