Конференция "Базы" » Помогите оптимизировать скрипт [D5, MSSQL]
 
  • harisma © (17.09.09 15:36) [0]
    Существует 2 базы с набором таблиц одинаковой структуры.
    Обе базы имеют некоторые данные в этих таблицах.
    Необходимо из одной таблицы одной базы добавить в такую же таблицу другой базы недостающие записи.
    На этой таблице стоит уник констрейт на поле Name. Примари кей установлен на поле RECID. Это поле неавтоинкрементное. Соответственно получается следующий скрипт:


    INSERT INTO [base2].DBO.LISTVIEW
     SELECT * FROM [base1].DBO.LISTVIEW AS OLD
     WHERE NOT OLD.RECID IN (SELECT RECID FROM [base2].DBO.LISTVIEW)
     AND NOT OLD.NAME IN (SELECT NAME FROM [base2].DBO.LISTVIEW)



    Вот можно ли как-то оптимизировать условие WHERE?

    Спасибо заранее.
  • Anatoly Podgoretsky © (17.09.09 15:55) [1]
    Какой вопрос по Дельфи, а не по MSSQL?
  • Palladin © (17.09.09 16:19) [2]
    оптимизация SQL запросов проивзодится на уровне БД
  • sniknik © (17.09.09 16:20) [3]
    INSERT INTO LoacalBase.DBO.LISTVIEW
     SELECT o.*
     FROM OutBase.DBO.LISTVIEW AS o
     LEFT JOIN LoacalBase.DBO.LISTVIEW AS l
     WHERE l.RECID IS NULL


    должно быть быстрее, насколько это вообще возможно, с таким подходом. тянуть из другой базы всю, возможно не маленькую... таблицу ради вставки пары записей...
    лучше уж определить что то вроде точки отсчета (автоинкремент/время) и запрашивать только после нее, т.е. ту часть которая точно не существует в этой базе. ну и сохранять ее естественно при переносе очередной "порции".
  • stas © (17.09.09 16:27) [4]
    А я чего-то непонял в новой таблице IDREC и NAME не соответствуют старой.
    т.е. в новой IDREC 10 NAME ДЯДЯ ВАСЯ
    и в старой IDREC 10 NAME ТЕТЯ МАША?
    Тогда какими данными мы дополняем?
 
Конференция "Базы" » Помогите оптимизировать скрипт [D5, MSSQL]
Есть новые Нет новых   [134473   +28][b:0][p:0.001]