我爲我的一個客戶開發了一個招標管理系統的代碼種類。這是一段代碼:優化幫助:SQL查詢顯示每個國家的最低價格
try {
Connection con = Mycon.getConnection();
PreparedStatement ps = con.prepareStatement("TRUNCATE tempcalcplan");
ps.executeUpdate();
ps.clearBatch();
ps = con.prepareStatement("INSERT INTO tempcalcplan SELECT v.conid,c.conname, v.rate, v.venid FROM venprices v LEFT JOIN country c ON c.conid = v.conid WHERE (v.conid, v.rate) IN (SELECT v.conid, MIN(v.rate) FROM venprices v GROUP BY v.conid) GROUP BY v.conid");
ps.executeUpdate();
ps.clearBatch();
ps = con.prepareStatement("select * from tempcalcplan");
ResultSet rs = ps.executeQuery();
jTable1.setModel(DbUtils.resultSetToTableModel(rs));
} catch(Exception e){
e.printStackTrace();
}
這段代碼被設計成用作:
- 清空表
tempcalcplan
(假定先前的結果被存儲。) - 生成期望的數據與在兩張不同的表的幫助下(表格如下所示)並將其存儲在
tempcalcplan
表中 - 在jTable上顯示
tempcalcplan
表的結果。
這裏是country
和tempcalcplan
表。
country
(含30000條記錄)+---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | conid | int(10) | NO | PRI | NULL | | | conname | varchar(50) | YES | | NULL | | +---------+-------------+------+-----+---------+-------+
tempcalcplan
(包含1,80,000+紀錄)+---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | conid | int(10) | NO | PRI | NULL | | | conname | varchar(50) | YES | | NULL | | | rate | double | YES | | NULL | | | venid | varchar(50) | YES | | NULL | | +---------+-------------+------+-----+---------+-------+
venprices
+-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | conid | int(10) | NO | PRI | NULL | | | rate | double | YES | | NULL | | | venid | varchar(50) | NO | PRI | | | +-------+--------------+------+-----+---------+-------+
結果最多需要12-15分鐘才能顯示在jTable中。 我想把它縮短到1-2分鐘。
聞起來像[_Groupwise max_](https:// mariadb。com/kb/en/mariadb/groupwise-max-in-mariadb /) - 該鏈接顯示如何有效地執行此操作。 –