







|
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,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
32718
|
|