当数据量大的时候这段存储过程执行起来很慢,请问各位哪里需要改进一下

XiaoYi96 2017-08-14 04:46:23
select @mryj1=SUM(isnull(Amount,0)) from 表1
where EmplCode =any (select pmbase_zgbh from PMBASE where PMBASE_ZWLX='产品' AND DeptCode = ANY (select KCBMZD_YBMBH FROM KCBMZD))
and left(convert(varchar(10),RefFinDate,112),6)=@tjnf+@tjyf and (BillType='字段值2' or BillType='字段值3')
and ITEMCODE LIKE '%X' AND DeptCode=@ybmbh
select @mryj2= SUM(isnull(Amount,0)) from 表1
where EmplCode =any (select pmbase_zgbh from PMBASE where PMBASE_ZWLX='产品'AND DeptCode = ANY (select KCBMZD_YBMBH FROM KCBMZD))
and left(convert(varchar(10),RefFinDate,112),6)=@tjnf+@tjyf and (BillType='字段值5' or BillType='字段值6')
AND DeptCode=@ybmbh
--合计
set @mryj = isnull(@mryj1,0) + isnull(@mryj2,0)
...全文
576 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2017-08-16
  • 打赏
  • 举报
回复
引用 23 楼 XiaoYi96 的回复:
[quote=引用 20 楼 yenange 的回复:] 楼主莫心急, 先试下: 1. 去掉哪些条件能快起来? 2. 哪些条件能迅速缩小范围? --比如, 一个学校里按男女缩小范围不理想, 但按得了感冒的人来区别效果就很好了。 不要指望谁一口气给一个完美的sql给你, 毕竟你没提供演示的表及数据, 我们也接触不到你的真实环境。 但按我说的, 你再多提供一些信息, 还是能找到办法的。 医生也要经过望闻问切, 不急
谢谢啦[/quote] 不客气, 先按我说的提供相关信息, 我们好帮你分析吧
XiaoYi96 2017-08-16
  • 打赏
  • 举报
回复
引用 21 楼 DragonerHuang 的回复:
很久没玩mssql了,现在在搞mysql,但在搞mysql的时候,学了一样东西,可以先把你的需求模块化,再合并起来成一张表, 比如: select a,b,c from table1; select e,f,g from table2; table1与table2有很多个字段,可以想像到50个字段以上,每表都有1000万行的数据 需求:找出a,b,c,e,f,g这几个字段,条件,table1.id=table2.id 已经把table1与table2相关的字段拿出来了,再合并成一张新的表(当然,前提最好两表都有相应的索引),这时候搜索速度会快些。
谢谢啦
XiaoYi96 2017-08-16
  • 打赏
  • 举报
回复
引用 18 楼 sinat_28984567 的回复:
[quote=引用 17 楼 XiaoYi96 的回复:] [quote=引用 12 楼 sinat_28984567 的回复:] [quote=引用 6 楼 XiaoYi96 的回复:] [quote=引用 5 楼 sinat_28984567 的回复:] [quote=引用 4 楼 duanzi_peng 的回复:] [quote=引用 3 楼 sinat_28984567 的回复:] 大老远被@duanzi_peng 召唤过来,试试这个行不?
SELECT  @mryj = SUM(ISNULL(CASE WHEN ( BillType = '字段值2'
                                       OR BillType = '字段值3'
                                     )
                                     AND ITEMCODE LIKE '%X' THEN Amount
                                ELSE 0
                           END, 0))
        + SUM(ISNULL(CASE WHEN ( BillType = '字段值5'
                                 OR BillType = '字段值6'
                               ) THEN Amount
                          ELSE 0
                     END, 0))
FROM    表1
WHERE   EmplCode =ANY ( SELECT  pmbase_zgbh
                        FROM    PMBASE
                        WHERE   PMBASE_ZWLX = '产品'
                                AND DeptCode = ANY ( SELECT KCBMZD_YBMBH
                                                     FROM   KCBMZD ) )
        AND LEFT(CONVERT(VARCHAR(10), RefFinDate, 112), 6) = @tjnf + @tjyf
        AND DeptCode = @ybmbh 	
你真速度啊。你是怎么回复的这么快? 机器人么? 主要是对于sql来说欠缺很多,看到嵌套的sql都头疼。但是我也要恶补sql,推荐一本提高优化性能的书籍看看呗,不多,就一本就ok,多了看不完。[/quote] 我能说我看的是我们以前大版写的那本书么……》《SQL SERVER 性能优化与管理的艺术》[/quote] 大神呀,这一段用上之后速度没变快,反而变慢了几十秒。。。。我查了一下表1,发现表1有5000万条数据。。。。。[/quote] 好尴尬…… 试试这个呢?
SELECT  @mryj = SUM(ISNULL(Amount, 0))
FROM    表1
WHERE   EmplCode =ANY ( SELECT  pmbase_zgbh
                        FROM    PMBASE
                        WHERE   PMBASE_ZWLX = '产品'
                                AND DeptCode = ANY ( SELECT KCBMZD_YBMBH
                                                     FROM   KCBMZD ) )
        AND LEFT(CONVERT(VARCHAR(10), RefFinDate, 112), 6) = @tjnf + @tjyf
        AND ( ( ( BillType = '字段值2'
                  OR BillType = '字段值3'
                )
                AND ITEMCODE LIKE '%X'
              )
              OR ( BillType = '字段值5'
                   OR BillType = '字段值6'
                 )
            )
        AND DeptCode = @ybmbh 	
[/quote] 大神,我昨天那个测试错误了。。。。快几分钟的原因是有人删了数据,实际还是速度满了[/quote] 好吧……那还是用之前那个吧……[/quote] 谢谢啦
XiaoYi96 2017-08-16
  • 打赏
  • 举报
回复
引用 20 楼 yenange 的回复:
楼主莫心急, 先试下: 1. 去掉哪些条件能快起来? 2. 哪些条件能迅速缩小范围? --比如, 一个学校里按男女缩小范围不理想, 但按得了感冒的人来区别效果就很好了。 不要指望谁一口气给一个完美的sql给你, 毕竟你没提供演示的表及数据, 我们也接触不到你的真实环境。 但按我说的, 你再多提供一些信息, 还是能找到办法的。 医生也要经过望闻问切, 不急
谢谢啦
秋的红果实 2017-08-16
  • 打赏
  • 举报
回复
这么复杂的需求,建议不要将这个负担扔给数据库服务器,转为在程序里面解决问题,体现数据库“存储”之首要任务
DragonerHuang 2017-08-16
  • 打赏
  • 举报
回复
很久没玩mssql了,现在在搞mysql,但在搞mysql的时候,学了一样东西,可以先把你的需求模块化,再合并起来成一张表, 比如: select a,b,c from table1; select e,f,g from table2; table1与table2有很多个字段,可以想像到50个字段以上,每表都有1000万行的数据 需求:找出a,b,c,e,f,g这几个字段,条件,table1.id=table2.id 已经把table1与table2相关的字段拿出来了,再合并成一张新的表(当然,前提最好两表都有相应的索引),这时候搜索速度会快些。
吉普赛的歌 2017-08-16
  • 打赏
  • 举报
回复
楼主莫心急, 先试下: 1. 去掉哪些条件能快起来? 2. 哪些条件能迅速缩小范围? --比如, 一个学校里按男女缩小范围不理想, 但按得了感冒的人来区别效果就很好了。 不要指望谁一口气给一个完美的sql给你, 毕竟你没提供演示的表及数据, 我们也接触不到你的真实环境。 但按我说的, 你再多提供一些信息, 还是能找到办法的。 医生也要经过望闻问切, 不急
xdashewan 2017-08-16
  • 打赏
  • 举报
回复
引用 5 楼 sinat_28984567 的回复:
我能说我看的是我们以前大版写的那本书么……》《SQL SERVER 性能优化与管理的艺术》
这不是黄版主的书么,蛮好的蛮好的
二月十六 2017-08-16
  • 打赏
  • 举报
回复
引用 17 楼 XiaoYi96 的回复:
[quote=引用 12 楼 sinat_28984567 的回复:] [quote=引用 6 楼 XiaoYi96 的回复:] [quote=引用 5 楼 sinat_28984567 的回复:] [quote=引用 4 楼 duanzi_peng 的回复:] [quote=引用 3 楼 sinat_28984567 的回复:] 大老远被@duanzi_peng 召唤过来,试试这个行不?
SELECT  @mryj = SUM(ISNULL(CASE WHEN ( BillType = '字段值2'
                                       OR BillType = '字段值3'
                                     )
                                     AND ITEMCODE LIKE '%X' THEN Amount
                                ELSE 0
                           END, 0))
        + SUM(ISNULL(CASE WHEN ( BillType = '字段值5'
                                 OR BillType = '字段值6'
                               ) THEN Amount
                          ELSE 0
                     END, 0))
FROM    表1
WHERE   EmplCode =ANY ( SELECT  pmbase_zgbh
                        FROM    PMBASE
                        WHERE   PMBASE_ZWLX = '产品'
                                AND DeptCode = ANY ( SELECT KCBMZD_YBMBH
                                                     FROM   KCBMZD ) )
        AND LEFT(CONVERT(VARCHAR(10), RefFinDate, 112), 6) = @tjnf + @tjyf
        AND DeptCode = @ybmbh 	
你真速度啊。你是怎么回复的这么快? 机器人么? 主要是对于sql来说欠缺很多,看到嵌套的sql都头疼。但是我也要恶补sql,推荐一本提高优化性能的书籍看看呗,不多,就一本就ok,多了看不完。[/quote] 我能说我看的是我们以前大版写的那本书么……》《SQL SERVER 性能优化与管理的艺术》[/quote] 大神呀,这一段用上之后速度没变快,反而变慢了几十秒。。。。我查了一下表1,发现表1有5000万条数据。。。。。[/quote] 好尴尬…… 试试这个呢?
SELECT  @mryj = SUM(ISNULL(Amount, 0))
FROM    表1
WHERE   EmplCode =ANY ( SELECT  pmbase_zgbh
                        FROM    PMBASE
                        WHERE   PMBASE_ZWLX = '产品'
                                AND DeptCode = ANY ( SELECT KCBMZD_YBMBH
                                                     FROM   KCBMZD ) )
        AND LEFT(CONVERT(VARCHAR(10), RefFinDate, 112), 6) = @tjnf + @tjyf
        AND ( ( ( BillType = '字段值2'
                  OR BillType = '字段值3'
                )
                AND ITEMCODE LIKE '%X'
              )
              OR ( BillType = '字段值5'
                   OR BillType = '字段值6'
                 )
            )
        AND DeptCode = @ybmbh 	
[/quote] 大神,我昨天那个测试错误了。。。。快几分钟的原因是有人删了数据,实际还是速度满了[/quote] 好吧……那还是用之前那个吧……
XiaoYi96 2017-08-16
  • 打赏
  • 举报
回复
引用 12 楼 sinat_28984567 的回复:
[quote=引用 6 楼 XiaoYi96 的回复:] [quote=引用 5 楼 sinat_28984567 的回复:] [quote=引用 4 楼 duanzi_peng 的回复:] [quote=引用 3 楼 sinat_28984567 的回复:] 大老远被@duanzi_peng 召唤过来,试试这个行不?
SELECT  @mryj = SUM(ISNULL(CASE WHEN ( BillType = '字段值2'
                                       OR BillType = '字段值3'
                                     )
                                     AND ITEMCODE LIKE '%X' THEN Amount
                                ELSE 0
                           END, 0))
        + SUM(ISNULL(CASE WHEN ( BillType = '字段值5'
                                 OR BillType = '字段值6'
                               ) THEN Amount
                          ELSE 0
                     END, 0))
FROM    表1
WHERE   EmplCode =ANY ( SELECT  pmbase_zgbh
                        FROM    PMBASE
                        WHERE   PMBASE_ZWLX = '产品'
                                AND DeptCode = ANY ( SELECT KCBMZD_YBMBH
                                                     FROM   KCBMZD ) )
        AND LEFT(CONVERT(VARCHAR(10), RefFinDate, 112), 6) = @tjnf + @tjyf
        AND DeptCode = @ybmbh 	
你真速度啊。你是怎么回复的这么快? 机器人么? 主要是对于sql来说欠缺很多,看到嵌套的sql都头疼。但是我也要恶补sql,推荐一本提高优化性能的书籍看看呗,不多,就一本就ok,多了看不完。[/quote] 我能说我看的是我们以前大版写的那本书么……》《SQL SERVER 性能优化与管理的艺术》[/quote] 大神呀,这一段用上之后速度没变快,反而变慢了几十秒。。。。我查了一下表1,发现表1有5000万条数据。。。。。[/quote] 好尴尬…… 试试这个呢?
SELECT  @mryj = SUM(ISNULL(Amount, 0))
FROM    表1
WHERE   EmplCode =ANY ( SELECT  pmbase_zgbh
                        FROM    PMBASE
                        WHERE   PMBASE_ZWLX = '产品'
                                AND DeptCode = ANY ( SELECT KCBMZD_YBMBH
                                                     FROM   KCBMZD ) )
        AND LEFT(CONVERT(VARCHAR(10), RefFinDate, 112), 6) = @tjnf + @tjyf
        AND ( ( ( BillType = '字段值2'
                  OR BillType = '字段值3'
                )
                AND ITEMCODE LIKE '%X'
              )
              OR ( BillType = '字段值5'
                   OR BillType = '字段值6'
                 )
            )
        AND DeptCode = @ybmbh 	
[/quote] 大神,我昨天那个测试错误了。。。。快几分钟的原因是有人删了数据,实际还是速度满了
XiaoYi96 2017-08-15
  • 打赏
  • 举报
回复
引用 12 楼 sinat_28984567 的回复:
[quote=引用 6 楼 XiaoYi96 的回复:] [quote=引用 5 楼 sinat_28984567 的回复:] [quote=引用 4 楼 duanzi_peng 的回复:] [quote=引用 3 楼 sinat_28984567 的回复:] 大老远被@duanzi_peng 召唤过来,试试这个行不?
SELECT  @mryj = SUM(ISNULL(CASE WHEN ( BillType = '字段值2'
                                       OR BillType = '字段值3'
                                     )
                                     AND ITEMCODE LIKE '%X' THEN Amount
                                ELSE 0
                           END, 0))
        + SUM(ISNULL(CASE WHEN ( BillType = '字段值5'
                                 OR BillType = '字段值6'
                               ) THEN Amount
                          ELSE 0
                     END, 0))
FROM    表1
WHERE   EmplCode =ANY ( SELECT  pmbase_zgbh
                        FROM    PMBASE
                        WHERE   PMBASE_ZWLX = '产品'
                                AND DeptCode = ANY ( SELECT KCBMZD_YBMBH
                                                     FROM   KCBMZD ) )
        AND LEFT(CONVERT(VARCHAR(10), RefFinDate, 112), 6) = @tjnf + @tjyf
        AND DeptCode = @ybmbh 	
你真速度啊。你是怎么回复的这么快? 机器人么? 主要是对于sql来说欠缺很多,看到嵌套的sql都头疼。但是我也要恶补sql,推荐一本提高优化性能的书籍看看呗,不多,就一本就ok,多了看不完。[/quote] 我能说我看的是我们以前大版写的那本书么……》《SQL SERVER 性能优化与管理的艺术》[/quote] 大神呀,这一段用上之后速度没变快,反而变慢了几十秒。。。。我查了一下表1,发现表1有5000万条数据。。。。。[/quote] 好尴尬…… 试试这个呢?
SELECT  @mryj = SUM(ISNULL(Amount, 0))
FROM    表1
WHERE   EmplCode =ANY ( SELECT  pmbase_zgbh
                        FROM    PMBASE
                        WHERE   PMBASE_ZWLX = '产品'
                                AND DeptCode = ANY ( SELECT KCBMZD_YBMBH
                                                     FROM   KCBMZD ) )
        AND LEFT(CONVERT(VARCHAR(10), RefFinDate, 112), 6) = @tjnf + @tjyf
        AND ( ( ( BillType = '字段值2'
                  OR BillType = '字段值3'
                )
                AND ITEMCODE LIKE '%X'
              )
              OR ( BillType = '字段值5'
                   OR BillType = '字段值6'
                 )
            )
        AND DeptCode = @ybmbh 	
[/quote] 我的天,好厉害,直接速度快了好几分钟,谢大神啊
二月十六 2017-08-15
  • 打赏
  • 举报
回复
引用 14 楼 XiaoYi96 的回复:
[quote=引用 3 楼 sinat_28984567 的回复:] 大老远被@duanzi_peng 召唤过来,试试这个行不?
SELECT  @mryj = SUM(ISNULL(CASE WHEN ( BillType = '字段值2'
                                       OR BillType = '字段值3'
                                     )
                                     AND ITEMCODE LIKE '%X' THEN Amount
                                ELSE 0
                           END, 0))
        + SUM(ISNULL(CASE WHEN ( BillType = '字段值5'
                                 OR BillType = '字段值6'
                               ) THEN Amount
                          ELSE 0
                     END, 0))
FROM    表1
WHERE   EmplCode =ANY ( SELECT  pmbase_zgbh
                        FROM    PMBASE
                        WHERE   PMBASE_ZWLX = '产品'
                                AND DeptCode = ANY ( SELECT KCBMZD_YBMBH
                                                     FROM   KCBMZD ) )
        AND LEFT(CONVERT(VARCHAR(10), RefFinDate, 112), 6) = @tjnf + @tjyf
        AND DeptCode = @ybmbh 	
大神,我突然想到一个,是不是我优化的想法不对?这个存储过程,其实整体是一个循环,然后 循环里的begin下才是我贴出的代码,请问,我是不是该从循环这个问题上着重处理。而不是着重处理查询那? declare MDYJJS cursor for select KCBMZD_BMBH,KCBMZD_BMMC,KCBMZD_YBMBH FROM KCBMZD WHERE KCBMZD_SFMD='1' AND KCBMZD_SFFC='0' ORDER BY KCBMZD_BMBH open MDYJJS fetch MDYJJS into @BMBH,@BMMC,@YBMBH while @@fetch_status=0 begin //一楼贴出的代码在此处 fetch MDYJJS into @BMBH,@BMMC,@YBMBH end close MDYJJS deallocate MDYJJS[/quote] 我勒个去……当然是了,如果能不循环,肯定不通过循环一条一条的去获取数据……
XiaoYi96 2017-08-15
  • 打赏
  • 举报
回复
引用 3 楼 sinat_28984567 的回复:
大老远被@duanzi_peng 召唤过来,试试这个行不?
SELECT  @mryj = SUM(ISNULL(CASE WHEN ( BillType = '字段值2'
                                       OR BillType = '字段值3'
                                     )
                                     AND ITEMCODE LIKE '%X' THEN Amount
                                ELSE 0
                           END, 0))
        + SUM(ISNULL(CASE WHEN ( BillType = '字段值5'
                                 OR BillType = '字段值6'
                               ) THEN Amount
                          ELSE 0
                     END, 0))
FROM    表1
WHERE   EmplCode =ANY ( SELECT  pmbase_zgbh
                        FROM    PMBASE
                        WHERE   PMBASE_ZWLX = '产品'
                                AND DeptCode = ANY ( SELECT KCBMZD_YBMBH
                                                     FROM   KCBMZD ) )
        AND LEFT(CONVERT(VARCHAR(10), RefFinDate, 112), 6) = @tjnf + @tjyf
        AND DeptCode = @ybmbh 	
大神,我突然想到一个,是不是我优化的想法不对?这个存储过程,其实整体是一个循环,然后 循环里的begin下才是我贴出的代码,请问,我是不是该从循环这个问题上着重处理。而不是着重处理查询那? declare MDYJJS cursor for select KCBMZD_BMBH,KCBMZD_BMMC,KCBMZD_YBMBH FROM KCBMZD WHERE KCBMZD_SFMD='1' AND KCBMZD_SFFC='0' ORDER BY KCBMZD_BMBH open MDYJJS fetch MDYJJS into @BMBH,@BMMC,@YBMBH while @@fetch_status=0 begin //一楼贴出的代码在此处 fetch MDYJJS into @BMBH,@BMMC,@YBMBH end close MDYJJS deallocate MDYJJS
XiaoYi96 2017-08-15
  • 打赏
  • 举报
回复
引用 11 楼 hanjun0612 的回复:
引用 9 楼 yenange 的回复:
[quote=引用 8 楼 XiaoYi96 的回复:] [quote=引用 7 楼 yenange 的回复:] 你可以试着一次去掉条件中的一个子项, 看哪个条件子项去掉之后能快起来?
我试过了,别的地方都没事,只要牵扯到表1,就会很慢,表一5000万数据
不能这么说, 你试下去掉下图的那个like也不能快一点: [/quote] 和我想的一样,不知道楼主有没有建索引。 如果有索引的话, ITEMCODE LIKE '%X' 不会走索引了[/quote] 有索引的,他表里自带两个索引,之前写这个存储过程的人,再这查询里也用到这索引了。我突然想到,是不是我优化的方式不对,这个存储过程,其实整体是一个循环,然后 循环里的begin下才是我贴出的代码,请问,我是不是该从循环这个问题上着重处理。而不是着重处理查询那? declare MDYJJS cursor for select KCBMZD_BMBH,KCBMZD_BMMC,KCBMZD_YBMBH FROM KCBMZD WHERE KCBMZD_SFMD='1' AND KCBMZD_SFFC='0' ORDER BY KCBMZD_BMBH open MDYJJS fetch MDYJJS into @BMBH,@BMMC,@YBMBH while @@fetch_status=0 begin //一楼贴出的代码在此处 fetch MDYJJS into @BMBH,@BMMC,@YBMBH end close MDYJJS deallocate MDYJJS
二月十六 2017-08-15
  • 打赏
  • 举报
回复
引用 6 楼 XiaoYi96 的回复:
[quote=引用 5 楼 sinat_28984567 的回复:] [quote=引用 4 楼 duanzi_peng 的回复:] [quote=引用 3 楼 sinat_28984567 的回复:] 大老远被@duanzi_peng 召唤过来,试试这个行不?
SELECT  @mryj = SUM(ISNULL(CASE WHEN ( BillType = '字段值2'
                                       OR BillType = '字段值3'
                                     )
                                     AND ITEMCODE LIKE '%X' THEN Amount
                                ELSE 0
                           END, 0))
        + SUM(ISNULL(CASE WHEN ( BillType = '字段值5'
                                 OR BillType = '字段值6'
                               ) THEN Amount
                          ELSE 0
                     END, 0))
FROM    表1
WHERE   EmplCode =ANY ( SELECT  pmbase_zgbh
                        FROM    PMBASE
                        WHERE   PMBASE_ZWLX = '产品'
                                AND DeptCode = ANY ( SELECT KCBMZD_YBMBH
                                                     FROM   KCBMZD ) )
        AND LEFT(CONVERT(VARCHAR(10), RefFinDate, 112), 6) = @tjnf + @tjyf
        AND DeptCode = @ybmbh 	
你真速度啊。你是怎么回复的这么快? 机器人么? 主要是对于sql来说欠缺很多,看到嵌套的sql都头疼。但是我也要恶补sql,推荐一本提高优化性能的书籍看看呗,不多,就一本就ok,多了看不完。[/quote] 我能说我看的是我们以前大版写的那本书么……》《SQL SERVER 性能优化与管理的艺术》[/quote] 大神呀,这一段用上之后速度没变快,反而变慢了几十秒。。。。我查了一下表1,发现表1有5000万条数据。。。。。[/quote] 好尴尬…… 试试这个呢?
SELECT  @mryj = SUM(ISNULL(Amount, 0))
FROM    表1
WHERE   EmplCode =ANY ( SELECT  pmbase_zgbh
                        FROM    PMBASE
                        WHERE   PMBASE_ZWLX = '产品'
                                AND DeptCode = ANY ( SELECT KCBMZD_YBMBH
                                                     FROM   KCBMZD ) )
        AND LEFT(CONVERT(VARCHAR(10), RefFinDate, 112), 6) = @tjnf + @tjyf
        AND ( ( ( BillType = '字段值2'
                  OR BillType = '字段值3'
                )
                AND ITEMCODE LIKE '%X'
              )
              OR ( BillType = '字段值5'
                   OR BillType = '字段值6'
                 )
            )
        AND DeptCode = @ybmbh 	
正怒月神 2017-08-15
  • 打赏
  • 举报
回复
引用 9 楼 yenange 的回复:
引用 8 楼 XiaoYi96 的回复:
[quote=引用 7 楼 yenange 的回复:] 你可以试着一次去掉条件中的一个子项, 看哪个条件子项去掉之后能快起来?
我试过了,别的地方都没事,只要牵扯到表1,就会很慢,表一5000万数据
不能这么说, 你试下去掉下图的那个like也不能快一点: [/quote] 和我想的一样,不知道楼主有没有建索引。 如果有索引的话, ITEMCODE LIKE '%X' 不会走索引了
正怒月神 2017-08-15
  • 打赏
  • 举报
回复
ITEMCODE LIKE '%X' 这个先去掉试试速度。 前通配符,走全表查找。
吉普赛的歌 2017-08-15
  • 打赏
  • 举报
回复
引用 8 楼 XiaoYi96 的回复:
引用 7 楼 yenange 的回复:
你可以试着一次去掉条件中的一个子项, 看哪个条件子项去掉之后能快起来?
我试过了,别的地方都没事,只要牵扯到表1,就会很慢,表一5000万数据

不能这么说, 你试下去掉下图的那个like也不能快一点:

XiaoYi96 2017-08-15
  • 打赏
  • 举报
回复
引用 7 楼 yenange 的回复:
你可以试着一次去掉条件中的一个子项, 看哪个条件子项去掉之后能快起来?
我试过了,别的地方都没事,只要牵扯到表1,就会很慢,表一5000万数据
吉普赛的歌 2017-08-15
  • 打赏
  • 举报
回复
你可以试着一次去掉条件中的一个子项, 看哪个条件子项去掉之后能快起来?
加载更多回复(6)

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧