1.傳遞一組agent_id 提高SQL性能,不要一次傳遞一個agent_id
select agent_id agentId ,count(service_type) counts, sum(time_to_sec(end_time)-time_to_sec
(start_time)) seconds from et_service_log where service_type=? and site_id=? and agent_id in (?, ?,
?, ?, ?, ?, ?, ?, ?, ?) group by agent_id
SQLQuery sqlQuery = this.getSession().createSQLQuery(conditionSql);
sqlQuery.setParameterList("agentId", agentIdList);
2.主從明細表關系查詢優(yōu)化
普遍方法是 先查詢主表IDLIST,再通過每個ID,獲取一組明細表中的數(shù)據(jù)
優(yōu)化方法是 主從表 LEFT JOIN 一次執(zhí)行就可以把相關數(shù)據(jù)RESRARCH
CODE :
Criteria criteria = createCriteria(MessageCategory.class)
.add(Restrictions.eq("entityPk.siteId", siteId))
.add(Restrictions.eq("deleted", false));
criteria.createAlias("messageContentSet",
"messageContentSet",JoinFragment.LEFT_OUTER_JOIN).setFetchMode("messageContentSet",
FetchMode.JOIN).add(
Restrictions.eq("messageContentSet.deleted", false)).addOrder
(Order.desc("entityPk.id"));
List listData=criteria.list();
Set set =new HashSet(listData); (* 過濾重復數(shù)據(jù))
------君臨天下,舍我其誰
------