Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / как быстрее (правильнее) вставить порядка 20000 записей? / 8 сообщений из 8, страница 1 из 1
01.03.2004, 02:39
    #32425613
trancerr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как быстрее (правильнее) вставить порядка 20000 записей?
как быстрее (правильнее) вставить порядка 20000 записей?

есть данные в таком виде (это лог :)
записей 15000 +- 5000

192.168.6.78 - trancerr [28/Feb/2004:10:03:16 +1000]
"GET http://ppk.intra.net:61230/Images/div-sh.gif HTTP/1.1" 304 0

в таком виде всё это в базульке:

ip user_name date_time url code bytes

получается 5 таблиц:
1) ip(id host)
2) users(id name)
3) url(id host)
4) code(id code)
5) log(id id_ip id_user date_time id_url id_code bytes)

при вставке в базу прога проверяет есть ли в таблицах записи с IP USER URL CODE
затем в таблицу LOG вставляется типа такого
1 1 date_time 3 4 456

но очень медленно

как это реализовать с максимальной производительностью?
...
Рейтинг: 0 / 0
02.03.2004, 09:48
    #32427257
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как быстрее (правильнее) вставить порядка 20000 записей?
Что-то как-то совершенно непонятно, что вы хотите услышать в ответ на ваш вопрос. Дайте больше информации.
------------------------------------------------------------------
когда я ем, я глух и нем, когда я пью, вообще дурной
...
Рейтинг: 0 / 0
02.03.2004, 15:35
    #32428120
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как быстрее (правильнее) вставить порядка 20000 записей?
Основная идея состоит в том, чтобы записать данные сначала во временную таблицу без индексов, а потом перезаписать в нужную одним SQL-выражением.
...
Рейтинг: 0 / 0
02.03.2004, 21:04
    #32428668
Добрый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как быстрее (правильнее) вставить порядка 20000 записей?
Еще хорошим стилем считается перед заливкой отключить индексы и после заливки перестроить. Если индексы битовые - делать это надо обязательно.
У меня вызывает подозрение фраза
trancerrпри вставке в базу прога проверяет есть ли в таблицах записи У Вас приложение следит за ограничениями целосности ? В принципе это должно быть реализовано механизмами СУБД.
...
Рейтинг: 0 / 0
03.03.2004, 06:33
    #32428817
trancerr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как быстрее (правильнее) вставить порядка 20000 записей?
>Основная идея состоит в том, чтобы записать данные сначала во временную >таблицу без индексов,а потом перезаписать в нужную одним SQL->выражением.

т.е. такой запрос который из временной всё раскидает по "справочным" таблицам?
хорошо попробую, просто опыта\знаний мало....



> У Вас приложение следит за ограничениями целосности ?
> В принципе это >должно быть реализовано механизмами СУБД

к сожалению приложение....

знаю что есть т.н. зранимые процедуры, может воспользоваться этим средством?

спасибо.
...
Рейтинг: 0 / 0
03.03.2004, 20:49
    #32430254
Добрый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как быстрее (правильнее) вставить порядка 20000 записей?
>знаю что есть т.н. зранимые процедуры, может воспользоваться этим >средством
Вобще-то я имел ввиду foreign key или тригеры.
Как именно происходит проверка целосности в приложении?
Если что-то типа такого
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
  select count(*) into :p1 from ip where id=:p2;
  if(:p1= 0 ) then -> прервать
  select count(*) into :p1 from users where id=:p2;
  if(:p1= 0 ) then -> прервать
  select count(*) into :p1 from url where id=:p2;
  if(:p1= 0 ) then -> прервать
  select count(*) into :p1 from code where id=:p2;
  if(:p1= 0 ) then -> прервать

  insert into log ...
end; ...и так  20  тысяч раз;
, то проблема именно в этом. В данном примере происходит полное сканирование четырех таблиц 20000 раз подряд - при достаточно больших таблицах ip, users, url, code это обязательно будет долго.

Но это мои личные домыслы. Желательно что-бы Вы вставили отладку, нашли в какие моменты происходит основное падение производительности. Также было бы хорошо, если бы Вы привели размеры таблиц, индексов по этим таблицам ну и алгоритм проверки целосности.
...
Рейтинг: 0 / 0
03.03.2004, 22:49
    #32430299
Хрен
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как быстрее (правильнее) вставить порядка 20000 записей?
Судя по примеру ваше приложение должно сначала найти ip в таблице ip, (и остальные поля также) а потом уже вставить в таблицу log уже не сам ip а его id. И именно в процессе поиска id по ip, users и тд основные тормоза.. Я правильно понял постановку задачи? Если так, то foreign key тут не по теме конечно..

Прежде всего напишите какой у вас sql сервер.. ;-)

Потом напишите какие индексы в таблицах ip users и тд

Потом действительно посмотрите в сторону PL/SQL
...
Рейтинг: 0 / 0
04.03.2004, 05:34
    #32430390
trancerr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как быстрее (правильнее) вставить порядка 20000 записей?
Хрен меня понял! :)

SQL сервер - MS SQL Server 2000
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / как быстрее (правильнее) вставить порядка 20000 записей? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]