公司材料出库记录表 数量记录大概50多万条记录  经常查询某个器件出库记录 很消耗数据库cpu资源  下面是搜索某个器件sql语句,请大家帮忙看下怎么优化一下
select cl_class,cl_num,cl_ren,cl_date,(select cl_name from clid where cl_class=clchu.cl_class) as cl_name from clchu where (select cl_name from clid where cl_class=clchu.cl_class) like '%搜索的某个器件%'说明下:
cl_class 是材料编号;cl_num 是材料出库数量;cl_ren是材料出库人;cl_date 是材料出库时间;cl_name是材料名称(材料名称是从clid表中获取的);  clid 是材料名称编号表里面有 cl_class,cl_name 材料编号对应材料名称; clchu是材料出库表 我从sql跟踪查看器里执行这个sql语名很消耗cpu资源  请大家帮忙看有好的解决办法和优化方案 谢谢大家了

解决方案 »

  1.   

    不要使用这样的嵌套查询 效率极低
    把表clid 和表clchu  关联一下 用left join 关联查询
    另外最后的匹配条件 '%搜索的某个器件%'最好去掉前面一个“%”(如果不影响结果)
     
      

  2.   

    like这么低效率的查询,肯定慢,你可以 google “模糊查询优化”,看看有哪些可以使用的方法
      

  3.   


    select clid.cl_class,
           clid.cl_num,
           clid.cl_ren,
           clid.cl_date,
           clid.cl_name
      from clchu,clid
      where 1=1
      and clid.cl_class=clchu.cl_class
      and clid.cl_name  like
           '%搜索的某个器件%'
      

  4.   

    你的语句简化下其实就是这样的
    select cl_class,cl_num,cl_ren,cl_date,clid.cl_name
    from clchu join clid on clid.cl_class=clchu.cl_class
    where clid.cl_name  like '%搜索的某个器件%'
    你的那个子查询居然写了两遍,按SQL的执行顺序来说,也就执行了两遍
    大表的关联很耗性能,建议使用临时表,先根据名字查出你要的数据,再关联信息表得到结果~
      

  5.   

    select  c.cl_class,
    c.cl_num,
    c.cl_ren,
    c.cl_date,
    cd.cl_name
    from    clchu c
    INNER JOIN clid cd
     ON c.cl_calss=cd.cl_class
    where cd.cl_name like '%搜索的某个器件%'
      

  6.   

    不要用like, 可以加个关键字表 然后关联查询;
      

  7.   

    你不要也可以
    select clid.cl_class,
           clid.cl_num,
           clid.cl_ren,
           clid.cl_date,
           clid.cl_name
      from clchu,clid
      where clid.cl_class=clchu.cl_class
      and clid.cl_name  like
           '%搜索的某个器件%'
    数据量不大,这样就可以了