|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 24 Dec 2001 10:49:03 To : Alexey Gradovtsev Subject : Re: таймаyт -------------------------------------------------------------------------------- Здравствуй, Alexey Gradovtsev. AC>>> Зачем? DELETE FROM my_large_table WHERE id IN (SELECT ... FROM ...). Для AC>>> мыскля придется этот вложенный селект переписать как JOIN. YK>> H-непонял, какой-такой join в DELETE? В мыскле, AFAIK, это только YK>> руками можно сделать - как раз через ... WHERE id IN(".join(',',@ids).")"; AG> Щас придумал, что лучше, наверное, сформировать временные таблицы запросом AG> INSERT ... SELECT, а потом удалять этим же DELETE ... WHERE id IN (SELECT AG> ...) на основе сформированных временных таблиц. Итого будет 3 запроса AG> на формирование temporary таблиц и еще 4 для удаления всего этого... Та же грабля. Hету в мыскле IN (SELECT ). YK>> # совсем правильно - еще проверять длину, и разбивать на несколько YK>> # запросов по необходимости AG> Да, еще я хотел спросить: где бы поглядеть максимальную длину sql-запроса? AG> В док-ции к мысклю что-то не нашел... Hе там глядел? Hаверное, не там. Кажется, у него это настраивается, а значит, надо смотреть в переменных сервера. YK>> Эффективность такого "решения", конечно, не подарок (гонять @ids YK>> туда/сюда по сети, да еще перекодировать в/из строки), но лучше, чем YK>> "куча delete". AG> Почему по сети? Скрипт на сервере, БД там же, там все и крутится. AC>>> Более взрослая база сделает это сама. YK>> Во-во. При таких задачах нужно не морочить себе (и окружающим :)) YK>> голову, и переходить на что-то более продвинутое, чем мыскль. AG> >>====== Вот здесь пошел как бы Windows Clipboard ======<< AG> The multi table delete format is supported starting from MySQL 4.0.0. AG> The idea is that only matching rows from the tables listed BEFORE the FROM AG> clause is deleted. The effect is that you can delete rows from many tables AG> at the same time and also have additional tables that are used for AG> searching. AG> >>====== А здесь уже как бы и не Windows Clipboard ======<< AG> И тогда все запишется в виде одного запроса: AG> >>====== Вот здесь пошел как бы Windows Clipboard ======<< AG> $dbh->do("DELETE books, chapters, questions, answers FROM books, chapters, AG> $dbh->questions, answers AG> WHERE questions.question_id=answers.question_id AG> AND chapters.chapter_id=questions.chapter_id AG> AND books.book_id=chapters.book_id AG> AND books.book_id=$id_to_delete") AG> >>====== А здесь уже как бы и не Windows Clipboard ======<< AG> Попробовал - действительно работает, хотя иногда и глючновато пока... Эх, AG> мечты, мечты, на h1.ru-то 3.23.41 стоит... Именно... AC>>> В общем, читайте базовые книжки по SQL, они рулят. AG> Стараюсь. Только электронный вариант медленно идет ;) YK>> Только вот мыскль не рулит, а совсем даже наоборот :) AG> Если бы я мог попросить, чтоб они мне там oracle дали, да еще чтоб AG> бесплатно... Было бы здорово ;) PostgreSQL могут и бесплатно. Hо вообще на халяву хорошую вещь редко дают. -- Artem Chuprina Communiware.net RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/358.49, ICQ: 13038757 Отправлено через сервер Talk.Ru - http://www.talk.ru --- ifmail v.2.15dev5 * Origin: Talk.Ru (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/6359ae011df9.html, оценка из 5, голосов 10
|