Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.snto-msu.net/showflat.php?Number=8884216&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Wed Apr 13 09:46:35 2016
Кодировка: Windows-1251
[MySQL, solved] Почему-то не используется индекс - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 1
Sevurrrra
Хранитель маяка

Рег.: 10.09.2007
Сообщений: 2050
Рейтинг: 2760
  [MySQL, solved] Почему-то не используется индекс
      01.09.2009 21:11
 

code:
mysql> show create table myTable \G *************************** 1. row *************************** Table: myTable Create Table: CREATE TABLE `myTable` ( `id` int(11) NOT NULL auto_increment, `ionic` text, `weight` int(11) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=15829 DEFAULT CHARSET=utf8 1 row in set (0.00 sec)

Когда делаю селект:
code:
mysql> explain select id,ionic from myTable where id>100\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: myTable type: ALL possible_keys: PRIMARY key: NULL key_len: NULL ref: NULL rows: 8070 Extra: Using where 1 row in set (0.00 sec)

Если явно указать USE KEY (PRIMARY), ключ все равно не используется. Попробовал создать индекс по полю weight и в where вместо id наложить условие weight>0 - ключ все равно не используется. Но почему-то соглашается использовать ключ, если выбираю только одно поле id, без поля ionic.
Кто-нибудь знает, почему так может происходить? Версия мускуля 5.0.51a-3 (Debian).



Редактировал Sevurrrra (02.09.2009 11:56)
alepar

Рег.: 18.02.2004
Сообщений: 9216
Рейтинг: 3643
  Re: [MySQL] Почему-то не используется индекс [re: Sevurrrra]
      01.09.2009 22:25
4

Не скажу, как конкретно в мускуле, но обычно такое возникает, когда CBO по каким-то причинам решает, что прочитать всю таблицу проще



Whatever you do in life will be insignificant, but it's very important that you do it.
Klevzoff
member

Рег.: 13.06.2006
Сообщений: 151
Рейтинг: 151
  Re: [MySQL] Почему-то не используется индекс [re: Sevurrrra]
      01.09.2009 23:01
4

Если у тебя в таблице около 8к записей, то в результат по твоему условию попадут почти все. Индекс же дает существенный прирост производительности, когда мы выбираем не более 10% от всех записей. Логично, что СУБД решает не использовать его, а использовать sequential scan - это быстрее

По поводу вот этого
В ответ на:

Но почему-то соглашается использовать ключ, если выбираю только одно поле id, без поля ionic.



При выборке только id их можно целиком выбрать по индексу, не прибегая к чтению самих записей с диска

mmCleric

Рег.: 19.09.2004
Сообщений: 459
Из: Здесь
Рейтинг: 263
  Re: [MySQL] Почему-то не используется индекс [re: Sevurrrra]
      01.09.2009 23:02
3

USE KEY (PRIMARY) - это всего лишь рекомендация.
Чтобы форсировать использование, надо писать FORCE KEY (PRIMARY).
Если с ключом правда лучше, то можно попробовать еще analyze table, оно пересчитает распределение ключей в индексе, и оптимизатор запросов может изменить свое мнение о том, надо использовать индекс или нет.

Впрочем, если в базе 15829 строк, и хочется выбрать из них все, кроме первых 100, то mysql прав, в таком запросе индекс только помешает.



-Ofun
Sevurrrra
Хранитель маяка

Рег.: 10.09.2007
Сообщений: 2050
Рейтинг: 2760
  Re: [MySQL] Почему-то не используется индекс [re: mmCleric]
      02.09.2009 11:56
 

Оказалось, действительно анализатор мускуля сбрендил. Изначальная проблема возникла собственно из-за неиспользования мускулем индекса при джоине таблицы самой с собой по индексированному полю. Optimize table и repair table пробовал, а про analyze table забыл. Именно он и помог :)

Страницы: 1

Technical >> Development (Archive)

Дополнительная информация
0 зарегистрированных и 0 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы

Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в