#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:
Я бы сделал следующее:
- Загрузите данные из Excel в таблицу в вашей БД, например, table = to_be_added
- Запустите запрос, подобный этому:
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;
- Убедитесь, что таблица «существующая» имеет индекс при поиске дата
Комментарии:
1. Является ли сравнение и объединение между таблицами обычно быстрее, чем сравнение значений в sql statment и atable, или скорость будет зависеть от возможности того, что я могу проиндексировать таблицу?
2. Вероятно, для начала вам не нужно запускать его пакетно, проще написать SQL, и как только данные находятся в таблице, ими легче манипулировать и / или настраивать производительность