Добрый день, товарищи. Набросал небольшую утилиту, все работает прекрасно, кроме одного - скорости.
Суть проста - программа берет ровно 300 записей из MySQL, и записывает их в Microsoft SQL. Время выполнения - 12 мин.
Вкратце : в первой базе есть около 700 таблиц, лишь 300 из них заполняются. Таблицы зовут как : 'T' + номер железяки. т.е. семьсот таблиц T1 - T700.
В каждой из таблиц, есть столбцы : время, датчик, значение. Каждый час в таблицу пишется время, номер датчика (от 1 до 28) и значение этого датчика.
В другой базе данных, в которую я и перетаскиваю данные, сделано чуть чуть по другому - там вместо трехсот таблиц, используется одна, в ней есть : имя, время, и 28 столбцов сотв-щих каждому датчику.
Программа выбирает данные из первой базы, и пишет во вторую. Время это занимает - около 12-15 минут

. Это же жесть.
Может, я пишу код как муд*к?
Сама процедура :
Код:
for index := 1 to 728 do begin //читаем 720 таблиц t1 - t720
Application.ProcessMessages();
Line := '';
QMySQL.SQL.Clear(); // из базовой таблицы берем имя железяки, которое соответствует T + index
QMySQL.SQL.Text := 'SELECT Name FROM rstt WHERE hO = ' + IntToStr(index);
QMySQL.Open();
Device := QMySQL.FieldValues['Name'];
i := 0; // теперь в таблице этой железяки мы 28 раз берем значения ее 28ми датчиков за указанное время
while i < 28 do begin
QMySQL.SQL.Clear();
QMySQL.SQL.Text := 'SELECT AV FROM t' + IntToStr(index) + ' WHERE (Time LIKE ' + #39 + GetValues('Data') + ' ' + GetValues('Hour') + '%' + #39 + ' ) AND (Sen = ' + IntToStr(i) + ')';
QMySQL.Open();
if QMySQL.FieldValues['AV'] <> null then L[i] := FloatToStr(RoundTo(StrToFloat(QMySQL.FieldValues['AV']),-2));
if QMySQL.FieldValues['AV'] = null then i := 50;
QMySQL.Close;
Inc(i); // и кладем их в массив
end;
if i < 50 then begin
QMsSQL.SQL.Clear(); // раскладываем массив в запрос и посылаем в Ms SQL
Vals := '(' + #39 + Copy(Device,Pos('s7',Device) + 6,5) + #39 + ',' + #39 + GetValues('Data') + #39 + ',' + #39 + GetValues('Hour') + #39 ;
for z := 0 to 27 do Vals := Vals + ',' + #39 + L[z] + #39;
Vals := Vals + ')';
QMsSQL.SQL.Text := 'INSERT INTO dbo.newbase' + ' (ObName,Data,Time,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s20,s21,s22,s23,s24,s25,s26,s27,s28) VALUES ' + Vals;
QMsSQL.ExecSQL();
end;
end;