I wrote an sql code like below. Later, added some indexes according to where condition but the performance is not enough. Is there any general optimization rule for sql or is there any suggestion for below sql? How can I improve my sql code?
SELECT COUNT(*) OVER() AS tot_count,
PG.DESCR as partner,
THAF.APPDATA
FROM transhist th,
trans_app thaf,
partnergroup pg,
partnergrpkey pgk
WHERE TH.CreateDt >= to_date('?startdate', 'yyyymmddhh24mi')
AND TH.CreateDt <= to_date('?enddate', 'yyyymmddhh24mi')+1/1440
AND TH.TRANSSET = '820'
AND THAF.TRANSHISTID = th.id
AND THAF.COLUMNID = 74
AND THAF.APPDATA LIKE '%|?acctNo|%'
AND TH.TRNSLTPARTNERKEY = PGK.DOCHISTPARTNERKEY
AND PG.ID = PGK.PARTNERGROUPID
AND pg.ID IN (?tpValues)
ORDER BY TH.ID;
Indexing like below:
CREATE INDEX TRANS_APP_ALL ON TRANS_APP(TRANSHISTID, COLUMNID, APPDATA);
CREATE INDEX TRANS_CREATEDT ON TRANSHIST(TRANSSET, CREATEDT, TRNSLTPARTNERKEY);