速救啊sql死慢啊模糊查询的有关问题
发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
速救啊,sql死慢啊,模糊查询的问题
我有两张表,一张有一万条数据左右 还有一张数据有一百万左右。
现在这两张表关联,然后取出一些数据有分组,求和,统计。关联的唯一条件就是一个字段模糊。
SELECT T.TYDWNAME,
T.WORKDATE,
T.CARDNO,
C.CARD_ID,
C.CARD_NAME,
COUNT(T.CARDNO),
SUM(T.AMOUNT)
FROM TEMP_BFHPOSLC T, CARD_BIN C
WHERE
instr(T.CARDNO, C.card_id) = 1
GROUP BY T.CARDNO, T.TYDWNAME, T.WORKDATE,C.CARD_ID,C.CARD_NAME
索引建了 但是没调用。重点就是这个模糊啊!!!!
慢得吐血啊。。。。。求高人指导啊
------解决方案--------------------
是不是产生了许多 一对多的记录?
建议先调试一下,将上面的统计 分 2 步。 关联查询 - > 统计。
理由,观察第1步的完成时长,进一步确认影响性能的原因所在。
------解决方案--------------------
贴一下该sql的执行计划。instr(T.CARDNO, C.card_id) 这个会限制索引, 而且是两张不同表之前的操作。 无法建里函数索引。建议修改SQL逻辑实现方式。
顺便收集一下表的统计信息。 这个也会影响执行计划。
Oracle Statistic 统计信息 小结
http://blog.csdn.net/tianlesoftware/article/details/4668723
------解决方案--------------------
假设你的card_id为定长8,则可以将where条件中的
instr(T.CARDNO, C.card_id) = 1
改为
c.card_id = mid(t.cardno,1,8)
并且为表TEMP_BFHPOSLC建立card_id索引,为表CARD_BIN 建立函数mid(t.cardno,1,8)
索引。这样能绕开模糊匹配。
如果card_id长度不固定就没有什么好办法了。
------解决方案--------------------
按照这个统计的方式,快不了。
------解决方案--------------------
SELECT T.TYDWNAME,
T.WORKDATE,
T.CARDNO,
C.CARD_ID,
C.CARD_NAME,
COUNT(T.CARDNO),
SUM(T.AMOUNT)
FROM TEMP_BFHPOSLC T, CARD_BIN C
WHERE
T.CARDNO like C.card_id || '%'
GROUP BY T.CARDNO, T.TYDWNAME, T.WORKDATE,C.CARD_ID,C.CARD_NAME
like 'aaa%'是可以用到索引的,like'%aaa%'是不能用索引的,你的情况符合第一种,所以可以尝试,当然,这两个字段是索引是必须有的,最好是单字段索引
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
创建同义词报ORA-00955
各位大神,我创建公有同义词,怎么会报ORA-00955错?很多人遇到建立私有同义词有这个错,我怎么建立公有同义词也...
-
impdp导入为什么索引会占的非常大。
本帖最后由 xixi_168 于 2014-07-19 23:10:47 编辑
在做数据...
-
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
测试没有成功。
ORA-12514: TNS: 监听程序当前无法识别连接描述...
-
oracle神牛进!!!
1、如何用sql查出oracle自带的所有函数?
2、给定ascii码,如何用sql查出对应的字符?
3、为什么在java中和在oracl...
-
oracle的cmd执行一个.sql文件,遇到异常时退出而不是继续执行
假设有一个1.sql文件,内容是
Declare
X varchar2(20);
Begin
Sc...
-
oracle查看某一条记录中为空的字段总数
oralce中,某一条记录中怎么得到这条记录中字段值为空的总数呢?(不为空的总数也可)
比如:id a1...
-
三台ORACLE通信,DBLINK
三台ORACLE服务器,A、B、C,其中A和B在同一个内网,B为双网卡可以连接外网,C为外网ORACLE。现在在B上已经建立DBL...
-
OracleOraDb10g_home1TNSListener无法启动
OracleOraDb10g_home1TNSListener无法启动,每次启动都提示:“在本地计算机无法启动Ora...
-
虚拟机安装RAC,网卡可以用NAT方式连接吗?
大家好:
我看教程上设的,安装配置RAC,配置虚拟机的两块网卡,第一块网卡(eth0,配置公用I...
-
求解oracle监听服务名问题
最近在做服务器的双机热备时,发现两边的监听服务名不一致,一个是OracleOraDb11g_home1TNSListen...