Я тщательно обыскал этот сайт и не смог найти решение, которое подходит мне.Я пишу на python, и у меня очень мало знаний по SQL.В настоящее время мне нужно создать код для извлечения данных из базы данных SQL, а также организовать / обобщить его.Мой код ниже: (он был очищен в целях безопасности данных)
conn = pc.connect(host=myhost,dbname =mydb, port=myport,user=myuser,password=mypassword)
cur = conn.cursor()
query = ("""CREATE INDEX index ON myTable3 USING btree (name);
CREATE INDEX index2 ON myTable USING btree (date, state);
CREATE INDEX index3 ON myTable4 USING btree (currency, type);
SELECT tp.name AS trading_party_a,
tp2.name AS trading_party_b,
('1970-01-01 00:00:00'::timestamp without time zone + ((mc.date)::double precision * '00:00:00.001'::interval)) AS val_date,
mco.currency,
mco.type AS type,
mc.state,
COUNT(*) as call_count,
SUM(mco.call_amount) as total_call_sum,
SUM(mco.agreed_amount) as agreed_sum,
SUM(disputed_amount) as disputed_sum
FROM myTable mc
INNER JOIN myTable2 cp ON mc.a_amp_id = cp.amp_id
INNER JOIN myTable3 tp ON cp.amp_id = tp.amp_id
INNER JOIN myTable2 cp2 ON mc.b_amp_id = cp2.amp_id
INNER JOIN myTable3 tp2 ON cp2.amp_id = tp2.amp_id,
myTable4 mco
WHERE (((mc.amp_id)::text = (mco.call_amp_id)::text))
GROUP BY tp.name, tp2.name,
mc.date, mco.currency, mco.type, mc.state
LIMIT 1000""")
frame = pdsql.read_sql_query(query,conn)
Выполнение запроса занимает более 15 минут, даже если мой лимит установлен на 5. До того, как было добавлено предложение GROUP BY,он будет работать с LIMIT 5000 менее чем за 10 секунд.Мне было интересно, так как я знаю, что мой SQL не очень хорош, если кто-нибудь знает, где может быть причиной задержки, а также какие-либо улучшения должны быть сделаны.
РЕДАКТИРОВАТЬ: я не знаю, какпросматривать производительность SQL-запроса, но если бы кто-то мог сообщить мне об этом, я мог бы опубликовать производительность сценария.