在pics表上的aid,uid各自建立了索引,有下面两个查询语句:
select pid,thumbs,aid,uid from pics where aid=$album and uid=$uidselect pid,thumbs,aid,uid from (select * from pics where aid=$album) temptable where uid=$uid我想知道如果数据量在千万的时候,其中哪条语句的性能高些?
谢谢

解决方案 »

  1.   

    用explain 看一下 分为几个等级  其中ALL 为性能最不好的
    应该做创建键值
      

  2.   

    第一条的SQL效能要好,因为Sql在处理的时候,它会先将where的条件
    拿出来自己做优化,然后再去过滤数据.
    而第二种的方式,则是SQL在捞取每一行的时候都要去做那个判断,
    效能要差点
      

  3.   

    第二条语句的性能好些,这个可以去看一下《数据库原理》(萨、王)中介绍的select的执行流程和原理,并且这些符合数据查询优化中的选择先做原则
      

  4.   

    to jackydrl :
    第二个性能好些?mysql本身对于这样的查询就有优化,所以正像你所说的那样,其实是第一种好些。好就好在“选择”上
    mysql会在2个索引中选择一个结果较少的作为查询的索引。而第二个由sql语句定死了只能是用aid的索引。
    如果可以加个联合索引就好了:P
      

  5.   

    我仍然是坚持自己的看法,因为不论是mysql还是sql server,都是以标准SQL为基础的,它们都是有共同点的.呵呵
      

  6.   

    to   jackydrl   : 
    举个例子,aid=$album的结果数是10000,uid=$uid的结果数是100,
    第一种情况,mysql就会使用uid的索引,那么它将在100条记录中不用索引的找aid=$album而第二种情况呢?
    利用索引找出的结果数是10000,再在这里不利用索引找uid=$uid还是坚持你自己的看法么?:P
    呵呵,仅仅是希望来看的人不要被误导