
struts2 spring ibatIS 框架设计的平台,数据库中目前有大概4000万的数据,目前的查询效率非常的慢。
<!--查询短信日志结果集--><resultMapclass="com.box.module.operation.dto.SmsQueryDTO"id="smsQuer...
<!-- 查询短信日志结果集 -->
<resultMap class="com.box.module.operation.dto.SmsQueryDTO"
id="smsQueryDTOMap">
<result property="smsLogId" column="PKID" />
<result property="typeId" column="SMS_MESSAGE_TYPE" />
<result property="param" column="PARAM" />
<result property="intime" column="INTIME" />
<result property="mobileNO" column="MOBILE_NO" />
<result property="msgId" column="MSG_ID" />
<result property="smsStatus" column="SMS_STATUS" />
<result property="partPos" column="PART_POS" />
<result property="busnumber" column="BUSNUMBER" />
<result property="srcdepartment" column="SRCDEPARTMENT" />
<result property="conPkid" column="CON_PKID" />
<result property="identitycard" column="IDENTITYCARD" />
<result property="busTypeCode" column="bus_type_code" />
<result property="sendname" column="SEND_NAME"/>
</resultMap>
<!-- 查询短信日志 -->
<select id="querySms" resultMap="smsQueryDTOMap"
parameterClass="java.util.HashMap">
<![CDATA[
SELECT * FROM ( SELECT T.*, ROWNUM RN FROM (
select sca.pkid,
sca.sms_message_type,
sca.param,
sca.intime,
sca.mobile_no,
sca.msg_id,
sca.sms_status,
sca.part_pos,
sca.busnumber,
sca.srcdepartment,
sca.con_pkid,
sca.identitycard,
sca.send_name,
to_number(sca.bus_type_code) bus_type_code
FROM SMS_CONFIRM_ALL sca
WHERE ((1=1
]]>
<![CDATA[ )) ]]>
<isNotNull>
<isNotEmpty property="mobile" prepend="and">
sca.mobile_no like '%$mobile$%'
</isNotEmpty>
</isNotNull>
<isNotNull>
<isNotEmpty property="busnumber" prepend="and">
sca.busnumber like upper('%$busnumber$%')
</isNotEmpty>
</isNotNull>
<isNotNull>
<isNotEmpty property="busTypeCode" prepend="and">
sca.bus_type_code = $busTypeCode$
</isNotEmpty>
</isNotNull>
<isNotNull>
<isNotEmpty property="startTime" prepend="and">
sca.intime >= to_date(#startTime#,'yyyy-mm-dd')
</isNotEmpty>
</isNotNull>
<isNotNull>
<isNotEmpty property="endTime" prepend="and">
<![CDATA[ sca.intime <= to_date(#endTime#,'yyyy-mm-dd')]]>
</isNotEmpty>
</isNotNull>
<![CDATA[
order by sca.pkid desc
) T
WHERE ROWNUM <=#start#+#limit#
)
WHERE RN > #start#
]]>
</select> 展开
<resultMap class="com.box.module.operation.dto.SmsQueryDTO"
id="smsQueryDTOMap">
<result property="smsLogId" column="PKID" />
<result property="typeId" column="SMS_MESSAGE_TYPE" />
<result property="param" column="PARAM" />
<result property="intime" column="INTIME" />
<result property="mobileNO" column="MOBILE_NO" />
<result property="msgId" column="MSG_ID" />
<result property="smsStatus" column="SMS_STATUS" />
<result property="partPos" column="PART_POS" />
<result property="busnumber" column="BUSNUMBER" />
<result property="srcdepartment" column="SRCDEPARTMENT" />
<result property="conPkid" column="CON_PKID" />
<result property="identitycard" column="IDENTITYCARD" />
<result property="busTypeCode" column="bus_type_code" />
<result property="sendname" column="SEND_NAME"/>
</resultMap>
<!-- 查询短信日志 -->
<select id="querySms" resultMap="smsQueryDTOMap"
parameterClass="java.util.HashMap">
<![CDATA[
SELECT * FROM ( SELECT T.*, ROWNUM RN FROM (
select sca.pkid,
sca.sms_message_type,
sca.param,
sca.intime,
sca.mobile_no,
sca.msg_id,
sca.sms_status,
sca.part_pos,
sca.busnumber,
sca.srcdepartment,
sca.con_pkid,
sca.identitycard,
sca.send_name,
to_number(sca.bus_type_code) bus_type_code
FROM SMS_CONFIRM_ALL sca
WHERE ((1=1
]]>
<![CDATA[ )) ]]>
<isNotNull>
<isNotEmpty property="mobile" prepend="and">
sca.mobile_no like '%$mobile$%'
</isNotEmpty>
</isNotNull>
<isNotNull>
<isNotEmpty property="busnumber" prepend="and">
sca.busnumber like upper('%$busnumber$%')
</isNotEmpty>
</isNotNull>
<isNotNull>
<isNotEmpty property="busTypeCode" prepend="and">
sca.bus_type_code = $busTypeCode$
</isNotEmpty>
</isNotNull>
<isNotNull>
<isNotEmpty property="startTime" prepend="and">
sca.intime >= to_date(#startTime#,'yyyy-mm-dd')
</isNotEmpty>
</isNotNull>
<isNotNull>
<isNotEmpty property="endTime" prepend="and">
<![CDATA[ sca.intime <= to_date(#endTime#,'yyyy-mm-dd')]]>
</isNotEmpty>
</isNotNull>
<![CDATA[
order by sca.pkid desc
) T
WHERE ROWNUM <=#start#+#limit#
)
WHERE RN > #start#
]]>
</select> 展开
3个回答
展开全部
只能做个折中,考虑对短信做最近3个月查询。3个月外放在另外一个表(或者另外一台服务器)。基本上查询也就集中在前几个月了。这样数据就少了。数据多怎么查怎么索引都是慢的
展开全部
除非不得已尽量不要SELECT * 查询全部,只需要查询关键数据即可
尝试数据库集群,或者选用性能优秀的Oracle
使用一些快速的数据库连接池,比如号称比其它连接池快10倍以上的的bonecp
视图、存储过程等等
楼上的建议也是不错的
尝试数据库集群,或者选用性能优秀的Oracle
使用一些快速的数据库连接池,比如号称比其它连接池快10倍以上的的bonecp
视图、存储过程等等
楼上的建议也是不错的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
4000W的数据太多了,一次要查出来的话时间肯定是长的,可以考虑按索引分类查多次试试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询