SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.02.2009 20:30:55

coin
Гуру
Зарегистрирован: 15.07.2008
Сообщений: 66

Составной primary

Таблица:

Код:

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`)sad1,2)

Отредактированно coin (18.02.2009 00:34:10)

Неактивен

 

#2 18.02.2009 16:03:30

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Составной primary

Разница именно в том, что Вы используете tuples. Обсуждение было тут:
http://sqlinfo.ru/forum/viewtopic.php?id=1114

Ссылка на багу в трекере:
http://bugs.mysql.com/bug.php?id=31188

Неактивен

 

#3 18.02.2009 17:13:06

coin
Гуру
Зарегистрирован: 15.07.2008
Сообщений: 66

Re: Составной primary

Печально sad

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson