Я на самом деле использую библиотеку Cx_Oracle в Python для работы с моей базой данных Oracle.
import cx_Oracle as Cx
# Parameters for server connexion
dsn_tns = Cx.makedsn(_ip, _port, service_name=_service_name)
# Connexion with Oracle Database
db = Cx.connect(_user, _password, dsn_tns)
# Obtain a cursor for make SQL query
cursor = db.cursor()
Один из моих запросов записывает в INSERT кадра данных Python в моей целевой таблице Oracle среди некоторых условий.
query = INSERT INTO ORA_TABLE(ID1, ID2)
SELECT :1, :2
FROM DUAL
WHERE (:1 != 'NF' AND :1 NOT IN (SELECT ID1 FROM ORA_TABLE))
OR (:1 = 'NF' AND :2 NOT IN (SELECT ID2 FROM ORA_TABLE))
Цель этого запроса - записать в WHERE только те строки, которые соответствуют условиям.
На самом деле этот запрос работает хорошо, когда в моей целевой таблице Oracle есть несколько строк.Но если в моей целевой таблице Oracle содержится более 100 000 строк, это очень медленно, потому что я читаю всю таблицу в состоянии WHERE.
Есть ли способ улучшить производительность этого запроса с помощью соединения или чего-то еще?
Конец кода:
# SQL query incoming
cursor.prepare(query)
# Launch query with Python dataset
cursor.executemany(None, _py_table.values.tolist())
# Commit changes into Oracle database
db.commit()
# Close the cursor
cursor.close()
# Close the server connexion
db.close()