sql: быстрый способ проверить, есть ли данные уже в базе данных

#sql #upload #coding-efficiency

#sql #загрузка #кодирование-эффективность

Вопрос:

У меня есть таблица базы данных MSSQL (названная здесь: ТАБЛИЦА) с четырьмя столбцами (идентификатор, поиск, дата, значение), и я хочу проверить наличие большого объема данных, есть ли они в базе данных, используя python. Данные, которые я хочу добавить, здесь называются: to_be_added со столбцами index, lookup, date, value .

Чтобы проверить, существуют ли данные, я использую следующий sql. Он возвращает индекс из данных to_be_added, которых еще нет в базе данных. Сначала я проверяю, какие поисковые запросы есть в базе данных, а затем выполняю объединение только для подмножества (здесь называемого существующим).

 SELECT to_be_added."index",existing."ID" FROM
(
   (
     select * from dbo.TABLE
     where "lookup" in  (1,2,3,4,5,6,7,...)
   ) existing
right join 
    (
     select * from 
        ( Values
         (1, 1, 1/1/2000, 0.123),(2, 2, 1/2/2000, 0.456),(...,...,...)
        )t1(index,lookup,date,value)
    )to_be_added
 on existing.lookup = to_be_added.lookup
 and existing.date  = to_be_added.date
)
WHERE existing."ID" IS NULL
 

Я делаю это пакетно, так как в противном случае команда sql становится слишком большой для фиксации, а время выполнения слишком велико. Поскольку у меня есть миллионы строк для сравнения, я ищу более эффективную команду, поскольку это отнимает довольно много времени.
Любая помощь приветствуется

Комментарии:

1. Где вы храните данные, которых еще нет в базе данных?

2. Это большие листы xls, которые я объединяю, а затем сравниваю с базой данных

Ответ №1:

Я бы сделал следующее:

  1. Загрузите данные из Excel в таблицу в вашей БД, например, table = to_be_added
  2. Запустите запрос, подобный этому:
     SELECT a.index
    FROM to_be_added a
    LEFT OUTER JOIN existing e ON 
    a.lookup = e.lookup
    and a.date  = e.date
    WHERE e.lookup IS NULL;
     
  3. Убедитесь, что таблица «существующая» имеет индекс при поиске дата

Комментарии:

1. Является ли сравнение и объединение между таблицами обычно быстрее, чем сравнение значений в sql statment и atable, или скорость будет зависеть от возможности того, что я могу проиндексировать таблицу?

2. Вероятно, для начала вам не нужно запускать его пакетно, проще написать SQL, и как только данные находятся в таблице, ими легче манипулировать и / или настраивать производительность