![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите оптимизировать запрос, плз. [D5, Paradox]
madmike © (2002-07-19 03:20:00)Вот такой запрос:
("UPDATE reportbase SET reportbase.numb = (select name from firmbase WHERE reportbase.code=firmbase.idcode)"+
""" from reportbase,firmbase where reportbase.numb=""""");
Знач так, он рабочий, но, дело в том, что в таблице firmbase около 25000 элементов, а в reportbase где-то 200000, в обеих таблицах прим. по 20 полей, общий размер таблиц 90 метров(!).Так вот, запрос длился около 4 часов и, когда я его прервал, то оказалось, что выполнено(обновлено) 1/3 записей! Это же гемор. Ребят, посоветуйте, что-нить. Я пока тугой, с серъёзными базами недавно, простенькие ваще без головняка делаются, а тут напоролся... Не забуду указать конфу тачки, а то щас посыпется типа: меняй проц и т.д. Конфа:
morgan1000$1260(140x9)/75kav/256/GF2MX400/WD20_5400/ХРень_про
Во время запроса почти "не свопит", загрузка камня 100%
ЮЮ (2002-07-19 12:09:00) [1]to -=Sergeante=-
Вопрошавшего в конфе, увы, нету
>ОТКУДА в операторе UPDATE может быть FROM
я сказал о том же еще в самом первом посте.
Desdechado (2002-07-19 11:51:00) [2]1. с парадоксом, имхо, через TTable быстрее будет
2. любой подзапрос, как было сказано, выполняется для каждой строки. поэтому попробуй обойтись без него.
-=Sergeante=- (2002-07-19 09:04:00) [3]ОТКУДА в операторе UPDATE может быть FROM ????????? Превый раз такую дикую конструкцию вижу...
А какие поля у тебя проиндексированы?
Ещё вопрос. Может ли подзапросselect name from firmbase WHERE reportbase.code=firmbase.idcodeвернуть несколько значений?
ЮЮ (2002-07-19 08:23:00) [4]Подзапрос, как и положено :-) выполняется для каждой строки таблицы reportbase, УЖЕ указанной в UPDATE
ЮЮ (2002-07-19 08:20:00) [5]В запросе их по две штуки, вы о которых?
Шамиль (2002-07-19 08:16:00) [6]Дяденьки, простите засранца :), но я немножко не въехал: в подзапросе в клаузе FROM reportbase отсутствует, а в клаузе WHERE - присутствует. Это ничего? Нормально?
ЮЮ (2002-07-19 07:17:00) [7]странно, но у меня твоя конструкция не работает
UPDATE reportbase
SET reportbase.numb = (select name from firmbase WHERE reportbase.code=firmbase.idcode)
FROM reportbase,firmbase /* invalid usu of keyword */
where reportbase.numb=""
Без третьей строки работает:(4 сек на модификацию 8 строк из 16) :-)