Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
индекс создаётся без команды INDEX? (mich) 04/01/2008 - 15:18:55
      Re: доп инфо: (mich) 04/01/2008 - 15:46:49
      Re: догадка: создаётся и ... (mich) 04/01/2008 - 16:53:21
      Re: а вот и объяснение этому (vi.k) 04/01/2008 - 18:18:17

> Original message text:
> From: mich - 04/01/2008 - 15:18:55
> Subject:индекс создаётся без команды INDEX?
> -----------------
> Здравствуйте,
>
> вопрос возник по результатам другой темы.
>
> Я создаю т-цу
>
> CREATE TABLE lists_view_log (
> list_id INT UNSIGNED NOT NULL,
> user_id INT UNSIGNED DEFAULT NULL,
> view_at DATETIME NOT NULL,
> ip CHAR(15) DEFAULT NULL,
> FOREIGN KEY (list_id) REFERENCES lists(id) ON DELETE CASCADE,
> FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
> ) ENGINE=InnoDB;
>
> При этом автоматически возникают 2 индекса для столбцов
> list_id и user_id.
>
> В документации нашел только это:
>
> 7.5.11 Структуры таблиц и индексов
> Для всех таблиц InnoDB есть специальный индекс, в котором хранятся данные строк - он называется кластеризованным индексом. Если в таблице определить PRIMARY KEY, то индекс первичного ключа будет кластеризированным индексом.
> ...
> Если первичный ключ для таблицы не определен, то InnoDB самостоятельно создаст кластеризированный индекс;
>
> 1-й вопрос - почему у меня их два? Для каждого FOREIGN KEY? Нет, см. ниже.
>
> Далее, Я создаю т-цу с INDEX idx
>
> CREATE TABLE lists_view_log (
> list_id INT UNSIGNED NOT NULL,
> user_id INT UNSIGNED DEFAULT NULL,
> view_at DATETIME NOT NULL,
> ip CHAR(15) DEFAULT NULL,
> INDEX idx (list_id, user_id),
> FOREIGN KEY (list_id) REFERENCES lists(id) ON DELETE CASCADE,
> FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
> ) ENGINE=InnoDB;
>
> При этом возникают 2 индекса idx и для столбца user_id. А для list_id нет, хоть он и FOREIGN KEY.
> А мне как раз нужен list_id.
>
> 2 вопрос - как убрать индекс для столбца user_id?
>
> Далее, Я добавляю в т-цу INDEX list_id
>
> CREATE TABLE lists_view_log (
> list_id INT UNSIGNED NOT NULL,
> user_id INT UNSIGNED DEFAULT NULL,
> view_at DATETIME NOT NULL,
> ip CHAR(15) DEFAULT NULL,
> INDEX idx (list_id, user_id),
> INDEX list_id (list_id),
> FOREIGN KEY (list_id) REFERENCES lists(id) ON DELETE CASCADE,
> FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
> ) ENGINE=InnoDB;
>
> Теперь есть все 3 индекса.
> 2 вопрос - как убрать индекс для столбца user_id - еще актуальней!
>
>
>
>


From: mich - 04/01/2008 - 16:53:21
Subject:догадка: создаётся и ...
-----------------
догадка:

похоже, индексы действительно создаются по внеш. ключам.

а то, что list_id исчез после добавления idx - наверное потому, что list_id является 1-й чаcтью составного idx, то есть тоже имеется.



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
32718



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |