Screjet
Новичок
MySQL 4.1.10 :: Использование индексов при условии OR :: Не использует возможные
Гипотетическая таблица:
[sql]
CREATE TABLE `A`(
`id` int(10) unsigned NOT NULL auto_increment,
`A` int(10) unsigned NOT NULL default '0',
`B` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `A` (`A`),
KEY `B` (`B`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Main structure tree' AUTO_INCREMENT=27 ;
[/sql]
Запрос:
[sql]
EXPLAIN SELECT *
FROM `A`
WHERE `A` =4 OR `B` =4
[/sql]
Возвращает
Без условия OR (SQL: .. WHERE `A`=4) использует индекс, а с условием прогоняет всю таблицу.
Как оптимально сделать?
В голову лезет только одна мысль: делать два запроса к таблице.
Гипотетическая таблица:
[sql]
CREATE TABLE `A`(
`id` int(10) unsigned NOT NULL auto_increment,
`A` int(10) unsigned NOT NULL default '0',
`B` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `A` (`A`),
KEY `B` (`B`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Main structure tree' AUTO_INCREMENT=27 ;
[/sql]
Запрос:
[sql]
EXPLAIN SELECT *
FROM `A`
WHERE `A` =4 OR `B` =4
[/sql]
Возвращает
Код:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE A ALL A,B NULL NULL NULL 25 Using where
Как оптимально сделать?
В голову лезет только одна мысль: делать два запроса к таблице.