ecs_goods表有500万条数据,goods_id是primary key select goods_id ,goods_name from ecs_goods where goods_id in(1,4232222,34,4999999,3222)这样的SQL怎么优化。

解决方案 »

  1.   

    select goods_id ,goods_name from ecs_goods where goods_id=1
    union all
    select goods_id ,goods_name from ecs_goods where goods_id=4232222
    union all
    select goods_id ,goods_name from ecs_goods where goods_id=34
    union all
    select goods_id ,goods_name from ecs_goods where goods_id=4999999
    union all
    select goods_id ,goods_name from ecs_goods where goods_id=3222
      

  2.   

    select goods_id ,goods_name from ecs_goods where goods_id=1
    union all
    select goods_id ,goods_name from ecs_goods where goods_id=4232222
    union all
    select goods_id ,goods_name from ecs_goods where goods_id=34
    union all
    select goods_id ,goods_name from ecs_goods where goods_id=4999999
    union all
    select goods_id ,goods_name from ecs_goods where goods_id=3222
     
      

  3.   

    用union all效率高。还是用循环效率高 ?
    比如$ar = array(1,4232222,34,4999999,3222)foreach($ar as $k){
     select goods_id ,goods_name from ecs_goods where goods_id="$k"
    }
      

  4.   

    循环效率高。不需要数据库端进行UNION ALL的操作以减少开销。
    如果只是四条记录,则直接用IN,IN的效率并不差。
      

  5.   

    就四个值,用IN, OR, Union All似乎区别不大。
      

  6.   

    ecs_goods表有500万条数据,goods_id是primary key 
    如果 select goods_id ,goods_name from ecs_goods where goods_id in ( 这里有50个值呢)?这个时候用循环好?
    还是union好
    还是for循环好。 ?
      

  7.   

    感觉不管是4条还是50条都是UNION ALL好。因为数据库系统会对SQL语句进行内部优化,实际返回的结果,肯定比你在外面一条一条取快,而且你在外面这样循环每次调取还得花费更多的网络请求传输时间等等。