Удаление строк из таблице с 3 PK

ZigFreeD

Новичок
Удаление строк из таблице с 3 PK

Приветствую.
Бьюсь уже третий день, и все выходит коряво :( Может кто нить мне поможет, буду очень благодарен.
Ситуация такая, имеется таблица с 3 PK, вот пример:

Курс (PK)| Группа (PK) | Фамилия (PK)

Помимо этих трех стобцов есть еще, но они не нужны, да и эта таблица приведена для примера... Ведь может такое случиться что на одном курсе, но в разных группах учатся два Ивановых, вот по этому и сделано 3PK.

Так вот мне нужно удалить из этой таблицы определенное кол-во строк (бывает всего 1-2, а бывает и под 100-1000!!!)
Я это сделал, так как сумел придумать, в цикле составить запрос типа (просьба долго не ржать :))

DELETE FROM какая_то_таблица WHERE (Курс=1 AND Группа=1 AND Фамилия IN ('Иванов', 'Петров','Сидоров'))

Но это не выход, у меня такой запрос работает минимум 0.1 сукенду, а когда удалять нужно более 100, то и все несколько секунд...
Может подскажете, а то я свихнусь скоро :(

ЗЫ:список тех какие нужно удалить берутся из запроса к другой таблице... может как то на этом сыграть нужно... но я не знаю как :(

ЗЫЫ: база InnoDB
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Ведь может такое случиться что на одном курсе, но в разных группах учатся два Ивановых, вот по этому и сделано 3PK.
Может случится, что на одном курсе, в одной группе, будут учится два Ивановых. Поэтому комбинация этих полей —_НЕ может являтся первичным ключом.

-~{}~ 11.11.08 01:19:

Читать сюда: http://ru.wikipedia.org/wiki/Суррогатный_ключ
 

Bitterman

Новичок
ZigFreeD
Первичным ключом должно быть поле ID (возможно, с автоинкрементом), а не указанные три поля. Соответственно, удаление осуществляется по этим ID (WHERE ID IN (1, 2 , 3 ...)).
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Первичным ключом должно быть поле ID (возможно, с автоинкрементом), а не указанные три поля.
Слово «должно» в данном контексте — несколько неуместно.
 

ZigFreeD

Новичок
Я привел данную табицу для примера... у меня совсем другая таблица... там последнее поле не текст, а число..
я подумал что так будет проще объяснить...

Зыбыл сразу сказать, чо база InnoDB...

Попробовал поставить MyISAM и все заработало намного быстрее... а точнее запрос выполнился не за 0.2 как в прошлый раз, а аж за 0.0002!!!
Но проблема в том что мне нужны преимущества InnoDB :(
к сжалению если решение не будет найдено придется его забросить :(
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Bitterman, ладно, согласен, твои формулировки ему явно будут ближе, чем мои. ;)
 

Bitterman

Новичок
Я привел данную табицу для примера... у меня совсем другая таблица... там последнее поле не текст, а число..
я подумал что так будет проще объяснить...
Это еще раз подтверждает правило, что в вопросе надо приводить реальные данные. Так что это у тебя за таблица? Если последнее поле число, то где тогда хранятся фамилии студентов?
 

ZigFreeD

Новичок
Да там таблица совсем не связана со студентами... и фамилий нигде нету...
я просто хотел показать что чаще всего меняется последнее значение, а первые 2 меняются реже... и все...
суть таблици не важна, я потрачу больше времени пытаюсь описать что и как вней... проще принять как константу, что две одинаковых фамилии быть не может...

Я думал на счет одного айди... но этоне вариант... данные слишком часто меняются... и в итоге могу упереться в предел... пусть и не через месяц... но он настанет... там с день могут удаляться до миллиона записей и создаваться еще миллион других уже...
 

ZigFreeD

Новичок
Аз есмь тормоз :)
Все понял... забыл транзакции включить... а иннодб гад автотранзакции сам делал :(
 
Сверху