Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Тормозит SQL сервер


Автор: DoZENT 14.3.2010, 15:21
Делаю такие запросы:
Код

  ADOQuery.SQL.Clear;
  ADOQuery.SQL.Add ('SELECT ID_Article');
  ADOQuery.SQL.Add ('FROM dbo.Catalog_Articles');
  ADOQuery.SQL.Add ('WHERE ArticleNumber =' + ''''+pArticleNumber+'''');
  ADOQuery.SQL.Add ('AND ID_MARK =' + IntToStr(pID_MARK));
  ADOQuery.Open;
  s := ADOQuery.FieldByName('ID_Article').AsString;
  if s = '' then begin
    ExecuteQuery ('INSERT INTO dbo.Catalog_Articles (ArticleNumber, ID_MARK, Description, ID_Text) ' +
                  'VALUES (' + ''''+pArticleNumber +''''+ ', ' + IntToStr(pID_MARK) + ', ' +
                  ''''+pDescription + ''''+ ', ' + IntToStr(pID_Text) +
                  ')');
    ADOQuery.SQL.Clear;
    ADOQuery.SQL.Add ('SELECT SCOPE_IDENTITY() as ID_Article');
    ADOQuery.Open;
    ArticleID := ADOQuery.FieldByName('ID_Article').AsInteger;
  end;

все нормально работает. Но проблема в том, что со временем записей становится все больше - десятки, сотни тысяч. И при выполнении очередного такого запроса программа сильно тормозит. Боюсь, когда записей станет несколько миллионов (а такое будет), каждый такой запрос будет отрабатываться непозволительно долго. Все ли правильно с этим запросом или его можно как-то оптимизировать?

Автор: Kesh 14.3.2010, 17:32
А индекс на ArticleNumber+ID_MARK есть?

Автор: Deniz 15.3.2010, 07:41
Вероятно индекс ArticleNumber+ID_MARK должен быть еще и уникальным.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)