Новости
Документация
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



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 - еще актуальней!





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

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

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



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