常做这样查询的话,在NCODE,CODE,LB上都建立索引试试
自己可以用explain分析一下

解决方案 »

  1.   

    在返回数据较多的情况下,建议使用LIMIT进行分页。
      

  2.   

    TO mathematician(数学家)
    我只是查询其中的一条
      

  3.   

    TO  trampwind(随风)     wildlily980(小李) 
    表结构里的KEY NCODE_CODE_LB (NCODE, CODE, LB)   已经做了这三个字段的索引
      

  4.   

    你的or语句部分可能无法利用索引的,正表扫描就会非常慢,把语句改成:
    select LASTD,QNOTED,CX,DAT from wme where NCODE = '$code' and LB='$lb' union select LASTD,QNOTED,CX,DAT from wme where CODE = '$code' and LB='$lb';
    在NCODE, CODE, LB三个字段上各建独立的索引,返回记录不是特别多的话应该非常快的(如果多可以limit下)。
      

  5.   

    TO  fanyi2003(才鸟)   你是怎样实现?能不能告诉我一下
      

  6.   

    我也看了这个资料,这个试过了,还是需要14秒,的确是比用
    $query = "select LASTD,QNOTED,CX,DAT from wme where (NCODE = '$code' or CODE = '$code') and LB='$lb'";
    快了 几秒钟,我也测试过了
      

  7.   

    你是说按select LASTD,QNOTED,CX,DAT from wme where NCODE = '$code' and LB='$lb' union select LASTD,QNOTED,CX,DAT from wme where CODE = '$code' and LB='$lb';
    查询仍然会很慢,我说的在NCODE, CODE, LB三个字段上各建独立的索引不知道你建了没(不是你建表的时候那个联合索引,可以这样建(如果肯定某列唯一的话建unique index更好):
    create index index_wmencode on wme(NCODE);
    create index index_wmecode on wme(CODE);
    create index index_wmelb on wme(LB);
    )
    [你原来建表的时候建的索引按这个语句也只能NCODE = '$code' 这一个条件可以利用上,其它的LB='$lb' 要在NCODE = '$code' 的结果集中扫描,union后面的要做全表扫描自然会慢。如果三个独立的索引你也都建了,仍然慢,那估计NCODE或CODE或LB它们单个的重复值特多(比入100W数据NCODE为某个值的就20W,30W,那索引意义就不大了)。
    另外可以考虑and的两个条件换位置,比如你了解表中LB重复值很少,可以把NCODE = '$code' and LB='$lb'换成  LB='$lb' and NCODE = '$code',这样前面条件已经排除了绝大部分记录,而本身LB(要建独立索引的)有索引,定位记录是很快的。查询规划器估计不会自动做这个优化(当然一些简单的比较1=0的条件查询规划器会直接认为条件永假的),要自己把握。
      

  8.   

    给NCODE, CODE, LB分别加上索引,试试看!另外顺便说一点,你的表没建主键,最好每张表都建一个主键。
      

  9.   

    trampwind(随风)   mathematician(数学家)
    我中午的时候就想结贴了(因为我回复了三次,所以不能答谢)谢谢你们,问题已经解决了,也是你们的说法
      

  10.   

    trampwind(随风) 同意你的看法
    我的90w数据就是这样建的 查询起来很快 
    这几天没来 就得了一分 汗!