其实 就是 两个表,一个表里存了名字,一个表了存了对应的id,于是 我把语句写成 select a.* ,b.* from a,b where a.id=b.id
但是 别人马上告诉我 这个不对!应该写成2条语句,并且可以加快速度,求 原理

解决方案 »

  1.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  2.   

    建了索引,第一条是 select * from a;
    第二条是select * from b;
    然后 用脚本处理 把第一条得到结果的id 用第二条结果的 名称替代
      

  3.   

    昏 脚本就是php,把得到的结果写进数组,比如第二条语句得到 arr['1'] = 'cc',那么第一条语句得到的id为1的就换成 cc.............额。。
      

  4.   

    为什么在数据库里能够得到的结果还要在PHP里去再操作一次呢?开发成本先不说,主键ID关联查询的效率是非常强的,何必在数据库上追求那么0.001毫秒,而让开发多工作3小时?
      

  5.   

    A、B两表准备10万条记录,在ID上建立索引
    试试:
    select * from a inner join b on a.id=b.id

    脚本处理的速度
      

  6.   

    a 表存的是一些索引信息如index,
    b 表存的是一些映射信息如 key, value, 
    我这样理解正确不?  要获取value 的信息.
    select b.value
    from b,
         (select 'arr[''' || a.index || ''']' key from a) a
    where b.key = a.key
    测试数据库是oracle 10g, 跟楼主一开始的写法差不多, 估计也要被教育.
    不过字符串对比确实不好, 有些特殊字符可能导致查询很慢, 不过楼主的表的key 字符还比较规范.
    如果是字符串不确定的,我宁愿把 select 'arr[''' || a.index || ''']' key from a 的结果插入到临时表中, 再通过临时表和b表关联查询.
    以前试过一个查询就是这样, 在前面1000条很快, 在1000-1300那里就很慢了, 后面又很快了. 全部查询花了15秒, 后来用了临时表, 查询只花了8秒. 很久以前的事情了, 看到这个帖子突然想起来了.
      

  7.   


    你说SQL语句执行一遍速度快?还是执行两遍快?还在程序里处理?
      

  8.   

    首先 先感谢 各位 大神 指导,没想到 那么多人回我帖子,太感动了,在此我再 描述一遍
    数据库 mysql,表 a, int id primary key auto_increment,其他无关字段,表b,int id primary key,char name,其他无关字段,需要实现的效果是 得到a表中的其他字段的值以及b表中的name字段的值,其中两个id是相等的
      按照我以往的做法 肯定是select a.*,b.name from a,b where a.id = b.id
      但是昨天 被告之 不管我以前怎么做,反正这个项目 必须用两条查询,原因 他就说是比他快,select * from a;select * from b;然后 用脚本处理 这些得到的数据,额所以很想 知道 具体原因
      

  9.   


     #2楼 的内容你最好看一下,否则别人仍然不知道你的具体情况。1. 索引情况?
    2. 结果是要A表中所有记录?select a.*,b.name from a,b where a.id = b.id ? 还是仅要某条记录? select a.*,b.name from a,b where a.id = b.id and b.name='aaaa' ?
    假设 (你的提问如果需要别人过多的假设的话,则楼主的确需要看看(提问的智慧) )A 表ID是PK, B表ID是PK。 显然所有A表记录及这些记录把对应B表中的NAME。则select a.*,b.name from a,b where a.id = b.id 显然高于 
    select * from a;
    while { ...
      select name from b where id= @i;
    }
    如果这个你还相信这个别人的说法,则你完全可以做个试验,以测试结果来证明一下,到底什么是对的。
      

  10.   

    当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
    http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
    http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html8、如何给分和结贴?
    http://community.csdn.net/Help/HelpCenter.htm#结帖
      

  11.   

    这个要看情况的,纯粹数据库而言,你说的对。
    但是假如这个系统应用到了缓存,比如memcached什么的,并且那个b表,数据量巨大又经常到处被引用,而本身不太可能发生变化或者即使看到过期数据也没什么大问题(比如SNS里面用户名),如果对B表根据ID进行了缓存的话,分开查询确实效率更高。