SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 19.04.2011 01:43:22

Lem0nti
Гуру
Откуда: Северная Пальмира
Зарегистрирован: 08.11.2007
Сообщений: 98

Не используется индекс

Есть таблица:

CREATE TABLE `items` (
  `id` int(10) NOT NULL auto_increment,
  `idcoll` int(10) NOT NULL default '0',
  `number` int(5) default NULL,
  `picture` varchar(20) NOT NULL default '',
  `hint` varchar(40) default NULL,
  `verified` int(1) NOT NULL default '0',
  `user` int(10) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `verified` (`verified`),
  KEY `idcoll` (`idcoll`),
  KEY `user` (`user`)
);

Есть к ней запрос:
select user,id from items where user>0

Или такой:
select user,count(id) from items where user>0 group by user


В обоих случаях не хочет использоваться индекс по полю user:
id     select_type     table     type     possible_keys     key     key_len     ref     rows     Extra
1    SIMPLE    items    ALL    user    NULL    NULL    NULL    37608    Using where; Using temporary; Using filesort

Подскажите, что не так? И как бы сделать так, чтобы индекс использовался? И правильно ли я понимаю, что индекс вообще-то должен использоваться?

Неактивен

 

#2 20.04.2011 21:12:15

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

Re: Не используется индекс

Нет, не должен, если пользователей с user <= 0 мало: выборка по индексу
будет работать медленнее полного скана таблицы из-за того, что последова-
тельное чтение быстрее случайного.

В последнем случае можно избавиться от filesort, если добавить ORDER BY NULL.

Неактивен

 

Board footer

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