SQL嵌套查询优化

SELECTcount(c.CUST_NO)FROMCI_CUS_PERSONcLEFTJOINCI_CUS_CERTCERTONc.CUST_NO=CERT.CUST_... SELECT count(c.CUST_NO) FROM CI_CUS_PERSON c LEFT JOIN CI_CUS_CERT CERT ON c.CUST_NO=CERT.CUST_NO WHERE c.CUST_TYPE like '1%'
and EXISTS (SELECT 1 FROM OP_ASN_CUST_INST aci WHERE aci.CUST_NO = c.CUST_NO AND aci.ORGID IN (select eao.ORGID from eos_auth_org eao WHERE eao.OPERATORID=1))
主要是where 条件语句EXISTS (SELECT 1 FROM OP_ASN_CUST_INST aci WHERE aci.CUST_NO = c.CUST_NO AND aci.ORGID IN (select eao.ORGID from eos_auth_org eao WHERE eao.OPERATORID=1)) 这个嵌套的优化,我的积分就这么多,没法加了,求高手
多谢大家帮忙,如果有办法我会都给积分,现在问题还没解决,下午再看看怎么办
结果集有重复数据列,单独对 c.CUST_NO的 Distinct,这个 c.CUST_NO,原来就有索引,我是没办法完成了,已经交给大老处理,我已经尝试过对单独 对c.CUST_NO使用Distinct,再和 CI_CUS_PERSON 内连接,结果也不理想,总之谢谢了,分数给你吧,你留在这最久
展开
 我来答
flyingFish211
2012-05-21 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.5万
采纳率:50%
帮助的人:1.1亿
展开全部
单从语句方面基本上没有优化的地方了,可以尝试下
SELECT count(c.CUST_NO)
FROM CI_CUS_PERSON c
LEFT JOIN CI_CUS_CERT CERT ON c.CUST_NO=CERT.CUST_NO
WHERE c.CUST_TYPE like '1%'
AND c.CUST_NO IN (SELECT CUST_NO FROM OP_ASN_CUST_INST aci WHERE ORGID IN (select eao.ORGID from eos_auth_org eao WHERE eao.OPERATORID=1)) 如果后面那个in里面的查询量不大的话。

可以考虑索引
OP_ASN_CUST_INST.CUST_NO,OP_ASN_CUST_INST.ORGID,
CI_CUS_PERSON.CUST_NO上面建立索引
更多追问追答
追问
已经建立索引,90W的数据非常慢,我考虑过
SELECT count( c.CUST_NO)FROM CI_CUS_PERSON c
inner join OP_ASN_CUST_INST aci on aci.CUST_NO = c.CUST_NO inner join eos_auth_org eao on eao.ORGID = aci.ORGID and eao.OPERATORID=1
LEFT JOIN CI_CUS_CERT CERT ON c.CUST_NO=CERT.CUST_NO
where c.CUST_TYPE = '1' 这样会提高点效率,可是没办法去除重复记录
追答
tRY 

SELECT count(c.CUST_NO)
FROM (SELECT * FROM CI_CUS_PERSON WHERE CUST_TYPE like '1%') c
LEFT JOIN CI_CUS_CERT CERT ON c.CUST_NO=CERT.CUST_NO
WHERE EXISTS (SELECT 1 FROM (SELECT * FROM OP_ASN_CUST_INST WHERE ORGID IN (select ORGID from eos_auth_org WHEREOPERATORID=1)) aci
WHERE aci.CUST_NO = c.CUST_NO )
柚鸥ASO
2024-03-16 广告
作为江苏柚鸥广告有限公司的工作人员,我为您解答。ASO优化是指在应用商店搜索结果中提高应用排名的过程。关键词的选择对于ASO优化至关重要。以下是一些选关键词的技巧:1. 确定目标用户:了解您的目标用户,找出他们可能会搜索的关键词。2. 研究... 点击进入详情页
本回答由柚鸥ASO提供
micro0369
2012-05-21 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:4079万
展开全部
1. 关联的列都建索引
2. 这样试试:
EXISTS (SELECT 1 FROM OP_ASN_CUST_INST aci,eos_auth_org eao WHERE aci.CUST_NO = c.CUST_NO AND aci.ORGID = eao.ORGID and eao.OPERATORID=1)
更多追问追答
追问
测试了下,效率还是没有提高,需要1分钟多,使用的是SYBASE数据库
追答
分别查一下:
1. 下列表的数据行数
2. 指定列的不同值个数
3. 指定内容的数据个数
然后根据这些情况,再尝试优化。

A. CI_CUS_PERSON 行数,CUST_NO 的个数,是否索引
B. OP_ASN_CUST_INST 行数,CUST_NO 的个数,是否索引; ORGID 的个数,是否索引
C. eos_auth_org 行数,ORGID 的个数,是否索引;OPERATORID 不同值的个数,值为1 的行数,是否索引
D. CI_CUS_CERT 行数,CUST_NO 的个数,是否索引; c.CUST_TYPE like '1%' 的行数,是否索引
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lanniao007
2012-05-21 · TA获得超过1012个赞
知道小有建树答主
回答量:1489
采纳率:40%
帮助的人:452万
展开全部
Select Count(A.CUST_NO) From
(SELECT Distinct c.CUST_NO FROM CI_CUS_PERSON c
inner join OP_ASN_CUST_INST aci on aci.CUST_NO = c.CUST_NO
inner join eos_auth_org eao on eao.ORGID = aci.ORGID and eao.OPERATORID=1
LEFT JOIN CI_CUS_CERT CERT ON c.CUST_NO=CERT.CUST_NO
where c.CUST_TYPE = '1'
) A
更多追问追答
追问
count(A.CUST_NO) 我是用来测试的,其实查的是很多字段,有办法在很多字段里面对“A.CUST_NO”使用Distinct ?
追答
可以。里面选择出来,外面再选择出来就可以了
Select A.CUST_NO,A.XXXX From
(SELECT Distinct c.CUST_NO,c.XXXX FROM CI_CUS_PERSON c
inner join OP_ASN_CUST_INST aci on aci.CUST_NO = c.CUST_NO
inner join eos_auth_org eao on eao.ORGID = aci.ORGID and eao.OPERATORID=1
LEFT JOIN CI_CUS_CERT CERT ON c.CUST_NO=CERT.CUST_NO
where c.CUST_TYPE = '1'
) A
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式