SQL语句执行特别慢
时间:2011-12-12
来源:互联网
从表A中取得电话字段到表B中的三个电话字段去匹配,只要表B中有一个电话匹配,即输出该条数据,如果不匹配到表C中的三个电话字段去匹配,只要有一个电话匹配,即输出该条数据
以表A中电话循环。
※电话字段不是表中的主键
源代码如下:数据一共10万条,运行超20秒, 请大家帮忙看看
——————————————————————————————
SELECT *
FROM @CustomerDt --用户自定义表类型
WHERE EXISTS (SELECT 1
FROM KH_QZKH
WHERE ISDEL = 0
AND (KH_QZKH.MOBILEPHONE1 = [联系方式1]
OR KH_QZKH.MOBILEPHONE2 = [联系方式1]
OR KH_QZKH.MOBILEPHONE3 = [联系方式1]
OR KH_QZKH.FIXPHONE1 = [联系方式1]
OR KH_QZKH.FIXPHONE2 = [联系方式1]
OR KH_QZKH.FIXPHONE3 = [联系方式1]
OR KH_QZKH.MOBILEPHONE1 = 联系方式2
OR KH_QZKH.MOBILEPHONE2 = 联系方式2
OR KH_QZKH.MOBILEPHONE3 = 联系方式2
OR KH_QZKH.FIXPHONE1 = 联系方式2
OR KH_QZKH.FIXPHONE2 = 联系方式2
OR KH_QZKH.FIXPHONE3 = 联系方式2
OR KH_QZKH.MOBILEPHONE1 = 联系方式3
OR KH_QZKH.MOBILEPHONE2 = 联系方式3
OR KH_QZKH.MOBILEPHONE3 = 联系方式3
OR KH_QZKH.FIXPHONE1 = 联系方式3
OR KH_QZKH.FIXPHONE2 = 联系方式3
OR KH_QZKH.FIXPHONE3 = 联系方式3)
OR EXISTS (SELECT 1
FROM CUSTOMER
WHERE [联系方式1(*)] = CUSTOMER.MOBILEPHONE1
OR [联系方式1(*)] = CUSTOMER.MOBILEPHONE2
OR [联系方式1(*)] = CUSTOMER.MOBILEPHONE3
OR [联系方式1(*)] = CUSTOMER.FIXPHONE1
OR [联系方式1(*)] = CUSTOMER.FIXPHONE2
OR [联系方式1(*)] = CUSTOMER.FIXPHONE3
OR 联系方式2 = CUSTOMER.MOBILEPHONE1
OR 联系方式2 = CUSTOMER.MOBILEPHONE2
OR 联系方式2 = CUSTOMER.MOBILEPHONE3
OR 联系方式2 = CUSTOMER.FIXPHONE1
OR 联系方式2 = CUSTOMER.FIXPHONE2
OR 联系方式2 = CUSTOMER.FIXPHONE3
OR 联系方式3 = CUSTOMER.MOBILEPHONE1
OR 联系方式3 = CUSTOMER.MOBILEPHONE2
OR 联系方式3 = CUSTOMER.MOBILEPHONE3
OR 联系方式3 = CUSTOMER.FIXPHONE1
OR 联系方式3 = CUSTOMER.FIXPHONE2
OR 联系方式3 = CUSTOMER.FIXPHONE3
)
作者: iamheyjudy 发布时间: 2011-12-12

作者: fredrickhu 发布时间: 2011-12-12
FROM KH_QZKH
WHERE ISDEL = 0
AND ([联系方式1] in(KH_QZKH.MOBILEPHONE1,KH_QZKH.MOBILEPHONE2,KH_QZKH.MOBILEPHONE3,
KH_QZKH.FIXPHONE1,KH_QZKH.FIXPHONE2,KH_QZKH.FIXPHONE3)
....
)
改成这样的试试
作者: ssp2009 发布时间: 2011-12-12
(SELECT 1
FROM KH_QZKH
WHERE ISDEL = 0
AND ([联系方式1] in(KH_QZKH.MOBILEPHONE1,KH_QZKH.MOBILEPHONE2,KH_QZKH.MOBILEPHONE3,
KH_QZKH.FIXPHONE1,KH_QZKH.FIXPHONE2,KH_QZKH.FIXPHONE3)
....
)
改成这样……
感谢回答,试了下 效果不明显,还是很忙,10万条大约20左右
作者: iamheyjudy 发布时间: 2011-12-12
SQL code
select id,电话1 as 电话 into #tb from tb union all select id,电话2 from tb union all select id,电话3 from tb
然后用#tb的电话字段去对比,避免使用or
作者: ssp2009 发布时间: 2011-12-12
你应该把这些不同的电话字段,放在一个临时表里
SQL code
select id,电话1 as 电话 into #tb from tb
union all
select id,电话2 from tb
union all
select id,电话3 from tb
然后用#tb的电话字段去对比,避免使用or
您再帮我写详细点
作者: iamheyjudy 发布时间: 2011-12-12
SELECT * FROM @CustomerDt a inner join KH_QZKH b1 on a.[联系方式1] in (b1.MOBILEPHONE1,b1.MOBILEPHONE2,b1.MOBILEPHONE3,b1.FIXPHONE1,b1.FIXPHONE2,b1.FIXPHONE3) and b.ISDEL=0 inner join KH_QZKH b2 on a.[联系方式2] in (b2.MOBILEPHONE1,b2.MOBILEPHONE2,b2.MOBILEPHONE3,b2.FIXPHONE1,b2.FIXPHONE2,b2.FIXPHONE3) and b.ISDEL=0 inner join KH_QZKH b3 on a.[联系方式3] in (b3.MOBILEPHONE1,b3.MOBILEPHONE2,b3.MOBILEPHONE3,b3.FIXPHONE1,b3.FIXPHONE2,b3.FIXPHONE3) and b.ISDEL=0 inner join CUSTOMER c1 on a.[联系方式1] in (c1.MOBILEPHONE1,c1.MOBILEPHONE2,c1.MOBILEPHONE3,c1.FIXPHONE1,c1.FIXPHONE2,c1.FIXPHONE3) inner join CUSTOMER c2 on a.[联系方式1] in (c2.MOBILEPHONE1,c2.MOBILEPHONE2,c2.MOBILEPHONE3,c2.FIXPHONE1,c2.FIXPHONE2,c2.FIXPHONE3) inner join CUSTOMER c3 on a.[联系方式1] in (c3.MOBILEPHONE1,c3.MOBILEPHONE2,c3.MOBILEPHONE3,c3.FIXPHONE1,c3.FIXPHONE2,c3.FIXPHONE3)
作者: ap0405140 发布时间: 2011-12-12
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28