Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];

Вниз

А как это делать правильнее и быстрее? (SQL)   Найти похожие ветки 

 
Behemoth   (2002-09-19 11:17) [0]

Например, есть две таблицы.
Первая (Clients): ID :Int (Автоинкрементное) и Name:String.
Вторая (Phones) : ID_Clients: int и Phone:String. Таблицы связаны по ID и ID_Clients. Задача заполнить их.

Делаю так: нахожу максимальный ID, прибавляю 1, потом
insert into Clients(ID,Name) Values (:MaxID,:Name)
insert into Phones (ID_Clients, Phone) Values (:MaxID,:Phone)
Так вот, записей, которых надо обновлять 150000, а полей, да и таблиц больше. В общем долго. Мож кто что предложит?


 
Андрей Прокофьев   (2002-09-19 11:20) [1]

Если поле AutoIncrement, то зачем искать максимальное значение


 
3JIA9I CyKA   (2002-09-19 11:31) [2]

Ку?

create table Clients (
ID int not null identity(1,1),
Name varchar(30) not null default "Чё-то",
constraint PK_Clients primary key nonclustered (ID)
)
go

create table Phones (
ID int not null,
Client_ID int not null,
Phone varchar(16) not null default "03",
constraint PK_Phones primary key nonclustered (ID),
constraint FK_Phones_Clients foreign key (Client_ID) references Clients (ID)
)
go

create procedure p_Jopa
@Name varchar(30),
@Phone varchar(10)
as
begin tran
declare @Client_ID int
insert into Clients (Name) values (@Name)
if @@error != 0 goto Err

select @Client_ID = @@identity

insert into Phones (Client_ID, Phone) values (@Client_ID, @Phone)
if @@error != 0 goto Err

commit tran
return
Err:
rollback tran
raiserror 50001 "Error, блин!"
go


 
Behemoth   (2002-09-19 11:31) [3]

А я не знаю как иначе. Какое значение писать во вторую таблицу?


 
3JIA9I CyKA   (2002-09-19 11:32) [4]

@@identity БЛН!


 
Behemoth   (2002-09-19 11:39) [5]

to 3JIA9I CyKA:
Поясни: select @Client_ID = @@identity
Что есть @@identity?


 
3JIA9I CyKA   (2002-09-19 11:42) [6]

Зайди в QA (кВеРи аНаЛайзЕр) и нажни F1 (Ф1).


 
Behemoth   (2002-09-19 11:43) [7]

to 3JIA9I CyKA:
Спасибо!!!!
Вроде дошло!


 
3JIA9I CyKA   (2002-09-19 11:45) [8]

8)


 
ЮЮ   (2002-09-19 11:46) [9]

1) убыстрение
StartTransaction<b/>
MaxID:=...(достаточно узнать один раз)
While not SourceQuery.EOF do
begin
inc(MaxID);
Insert1Queryparams.
[0].Value<b/>.:=MaxID;
Insert1Query.ExecSQL;
Insert2Query.params[0].Value:=MaxID;
Insert2Query.ExecSQL;
SourceQuery.Next;
end;
Commit<b/>

2) использовать те же ID, что и в исходной таблице и сделать всё одним запросом



 
Behemoth   (2002-09-19 11:51) [10]

to ЮЮ:
Записей 150000. В это время непрерывно идет обращение к базе со стороны других клиентов, которые тоже непрочь что-нить в нее вставить. По моему одна большая транзакция на полчаса чрезмерно загрузит базу


 
Behemoth   (2002-09-19 11:54) [11]

to ЮЮ:
Второй вариант точно не подходит из-за особенностей базы оригинала, да и обновляемой тоже.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
1-31875
ViRUS_1
2002-09-28 21:31
2002.10.10
Выравнивание по правому краю в TEdit


1-31737
maxim2
2002-10-01 08:23
2002.10.10
Подскажите где найти такой компонент


6-31932
Mishel
2002-08-09 15:02
2002.10.10
UDP/Soсket - на голом WinApi


3-31611
Осирис
2002-09-18 17:28
2002.10.10
Поле с именем SIZE


14-32013
RV
2002-09-17 16:27
2002.10.10
дайте если есть и нежалко инсталляцию паскаля > 4 версии, плз





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский