|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alexey Gradovtsev 2:5030/1247.7 20 Dec 2001 22:31:59 To : Yuriy Kaminskiy Subject : таймаyт -------------------------------------------------------------------------------- Yuriy Kaminskiy в письме к Artem Chuprina от 19 декабря 2001 г., 04:53 писал: AC>> Зачем? DELETE FROM my_large_table WHERE id IN (SELECT ... FROM ...). Для AC>> мыскля придется этот вложенный селект переписать как JOIN. YK> H-непонял, какой-такой join в DELETE? В мыскле, AFAIK, это только YK> руками можно сделать - как раз через ... WHERE id IN(".join(',',@ids).")"; Щас придумал, что лучше, наверное, сформировать временные таблицы запросом INSERT ... SELECT, а потом удалять этим же DELETE ... WHERE id IN (SELECT ...) на основе сформированных временных таблиц. Итого будет 3 запроса на формирование temporary таблиц и еще 4 для удаления всего этого... YK> # совсем правильно - еще проверять длину, и разбивать на несколько YK> # запросов по необходимости Да, еще я хотел спросить: где бы поглядеть максимальную длину sql-запроса? В док-ции к мысклю что-то не нашел... Hе там глядел? YK> Эффективность такого "решения", конечно, не подарок (гонять @ids YK> туда/сюда по сети, да еще перекодировать в/из строки), но лучше, чем YK> "куча delete". Почему по сети? Скрипт на сервере, БД там же, там все и крутится. AC>> Более взрослая база сделает это сама. YK> Во-во. При таких задачах нужно не морочить себе (и окружающим :)) YK> голову, и переходить на что-то более продвинутое, чем мыскль. >>====== Вот здесь пошел как бы Windows Clipboard ======<< The multi table delete format is supported starting from MySQL 4.0.0. The idea is that only matching rows from the tables listed BEFORE the FROM clause is deleted. The effect is that you can delete rows from many tables at the same time and also have additional tables that are used for searching. >>====== А здесь уже как бы и не Windows Clipboard ======<< И тогда все запишется в виде одного запроса: >>====== Вот здесь пошел как бы Windows Clipboard ======<< $dbh->do("DELETE books, chapters, questions, answers FROM books, chapters, $dbh->questions, answers WHERE questions.question_id=answers.question_id AND chapters.chapter_id=questions.chapter_id AND books.book_id=chapters.book_id AND books.book_id=$id_to_delete") >>====== А здесь уже как бы и не Windows Clipboard ======<< Попробовал - действительно работает, хотя иногда и глючновато пока... Эх, мечты, мечты, на h1.ru-то 3.23.41 стоит... AC>> В общем, читайте базовые книжки по SQL, они рулят. Стараюсь. Только электронный вариант медленно идет ;) YK> Только вот мыскль не рулит, а совсем даже наоборот :) Если бы я мог попросить, чтоб они мне там oracle дали, да еще чтоб бесплатно... Было бы здорово ;) 20 декабря 2001 г. С наибестейшими регардсами, *Alexey*. ... Смерть стоит того, чтобы жить... В. Цой. --- GoldED+/W32 snapshot-2001.02.24 * Origin: Три века без сна... (2:5030/1247.7) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/39613c222ef9.html, оценка из 5, голосов 10
|