Задавайте вопросы, мы ответим
Вы не зашли.
Таблица:
CREATE TABLE IF NOT EXISTS `tbl` ( `uid` int(10) unsigned NOT NULL, `id` int(10) unsigned NOT NULL auto_increment, `t` int(11) NOT NULL, PRIMARY KEY (`uid`,`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
В чём разница с точки зрения опимизатора между запросами:
SELECT * FROM `tbl` WHERE `uid`=1 AND `id`=2
EXPLAIN:
id 1 select_type SIMPLE table tbl type const possible_keys PRIMARY key PRIMARY key_len 8 ref const,const rows 1 Extra
и
SELECT * FROM `tbl` WHERE (`uid`,`id`)=(1,2)
EXPLAIN:
id 1 select_type SIMPLE table tbl type ALL possible_keys key key_len ref rows 104 Extra Using where
С трудом представляю как вообще можно по разному интерпретировать эти 2 записи..
FORCE INDEX не даёт никакого эффекта.
UPD:
Собственно здесь разницы нет никакой, могу и через AND писать, а вот как быть с конструкцией (`uid`,`id`)IN((1,2), (1,3), ..., (n,m))
Не хотелось бы записывать громоздкие условия "OR".
UPD2:
А выборка только по полям индекса использует этот самый индекс... странно
SELECT `uid`,`id` FROM `tbl` WHERE (`uid`,`id`)1,2)
Отредактированно coin (18.02.2009 00:34:10)
Неактивен
Разница именно в том, что Вы используете tuples. Обсуждение было тут:
http://sqlinfo.ru/forum/viewtopic.php?id=1114
Ссылка на багу в трекере:
http://bugs.mysql.com/bug.php?id=31188
Неактивен