12
返回列表 发新帖
楼主: edgar108

MySQL where xxx in 不使用索引 查询很慢!!

[复制链接]
论坛徽章:
0
11#
 楼主| 发表于 2011-7-17 11:52 | 只看该作者

回复 #10 kerlion 的帖子

恩,我自己写了一个出来,这样: 。。。

       delete from CJ_LS  where CX_BS in ( SELECT temp.cx_bs FROM
(
select   m.cx_bs from
CJ_LS m, CJ_CX n
where m.CX_BS = n.CX_BS
and N.SCCJ_DM=  ver_sccj_dm
) temp);

我看看你说的写法,谢谢了!

使用道具 举报

回复
论坛徽章:
52
2015年新春福章
日期:2015-03-06 11:57:312012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:32:552012新春纪念徽章
日期:2012-02-07 09:59:35
12#
发表于 2011-7-17 13:35 | 只看该作者
原帖由 edgar108 于 2011-7-17 11:52 发表
恩,我自己写了一个出来,这样: 。。。

       delete from CJ_LS  where CX_BS in ( SELECT temp.cx_bs FROM
(
select   m.cx_bs from
CJ_LS m, CJ_CX n
where m.CX_BS = n.CX_BS
and N.SCCJ_DM=  ver_sccj_dm
) temp);

我看看你说的写法,谢谢了!


DELETE CJ_LS FROM CJ_LS M,CJ_CX N WHERE M.CX_BS = N.CX_BS AND N.SCCJ_DM=  ver_sccj_dm;

使用道具 举报

回复
论坛徽章:
0
13#
 楼主| 发表于 2011-7-17 14:16 | 只看该作者

回复 #12 jinguanding 的帖子

现在问题解决了,不慢了。
我这么写的:

delete  from CJ_LS using CJ_LS ,CJ_CX where CJ_LS.CX_BS = CJ_CX.CX_BS and CJ_CX.SCCJ_DM = ver_sccj_dm;

使用道具 举报

回复
论坛徽章:
25
ITPUB元老
日期:2005-02-28 12:57:00咸鸭蛋
日期:2013-02-07 11:51:42咸鸭蛋
日期:2013-02-08 09:48:51蜘蛛蛋
日期:2013-02-21 15:47:392013年新春福章
日期:2013-02-25 14:51:24咸鸭蛋
日期:2013-02-28 17:08:42蜘蛛蛋
日期:2013-03-29 16:17:14双黄蛋
日期:2013-04-11 16:11:04咸鸭蛋
日期:2013-05-07 11:55:14咸鸭蛋
日期:2013-05-28 10:46:24
14#
发表于 2011-7-17 15:20 | 只看该作者
cool, mysql 只能看SELECT的执行计划,有点局限了

使用道具 举报

回复
论坛徽章:
10
2010广州亚运会纪念徽章:击剑
日期:2010-12-16 15:18:59ITPUB十周年纪念徽章
日期:2011-11-01 16:25:222010广州亚运会纪念徽章:帆船
日期:2011-05-12 09:06:552011新春纪念徽章
日期:2011-02-18 11:42:472010广州亚运会纪念徽章:橄榄球
日期:2011-01-09 16:56:412011新春纪念徽章
日期:2011-01-04 10:34:20数据库板块每日发贴之星
日期:2011-01-03 01:01:022010广州亚运会纪念徽章:举重
日期:2010-12-21 20:58:06数据库板块每日发贴之星
日期:2010-12-20 01:01:022012新春纪念徽章
日期:2012-01-04 11:56:01
15#
发表于 2011-7-26 17:25 | 只看该作者
为什么要加using的操作呢,有点不明白

使用道具 举报

回复
论坛徽章:
0
16#
发表于 2011-7-27 10:21 | 只看该作者
这种SQL,mysql优化器会自作主张的“优化”成关联子查询,外层查询会全表。所以这样的查询应该全部改写成join。除非外层的表很小

使用道具 举报

回复
论坛徽章:
14
2011新春纪念徽章
日期:2011-04-02 17:01:062013年新春福章
日期:2013-02-25 14:51:24复活蛋
日期:2012-12-06 19:27:46ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:00ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42紫蛋头
日期:2012-03-13 16:37:18灰彻蛋
日期:2012-02-06 14:20:122012新春纪念徽章
日期:2012-01-04 11:57:56灰彻蛋
日期:2011-12-26 14:20:13茶鸡蛋
日期:2011-12-20 15:00:13
17#
发表于 2011-7-27 14:12 | 只看该作者
root@localhost--my_db--7:10:58 >delete t1.* from t1 left join t3 on t1.id=t3.id;
Query OK, 4 rows affected (0.02 sec)

使用道具 举报

回复
论坛徽章:
8
奥运会纪念徽章:现代五项
日期:2008-10-24 13:26:492009新春纪念徽章
日期:2009-01-04 14:52:282009日食纪念
日期:2009-07-22 09:30:00ITPUB8周年纪念徽章
日期:2009-09-27 10:21:21生肖徽章2007版:猴
日期:2009-10-25 09:27:19授权会员
日期:2009-12-27 10:46:202010年世界杯参赛球队:阿根廷
日期:2010-01-18 12:04:24ITPUB9周年纪念徽章
日期:2010-10-08 09:31:21
18#
发表于 2011-8-22 08:16 | 只看该作者
这个是mysql优化器对子查询优化的不是很好缘故:
mysql使用外查询来驱动子查询,在explain 的时候加上extended ,然后show warnings就可以看到mysql改写后的sql语句。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表