A、B两表准备10万条记录,在ID上建立索引 试试: select * from a inner join b on a.id=b.id 与 脚本处理的速度
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秒. 很久以前的事情了, 看到这个帖子突然想起来了.
你说SQL语句执行一遍速度快?还是执行两遍快?还在程序里处理?
首先 先感谢 各位 大神 指导,没想到 那么多人回我帖子,太感动了,在此我再 描述一遍 数据库 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;然后 用脚本处理 这些得到的数据,额所以很想 知道 具体原因
#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; } 如果这个你还相信这个别人的说法,则你完全可以做个试验,以测试结果来证明一下,到底什么是对的。
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
第二条是select * from b;
然后 用脚本处理 把第一条得到结果的id 用第二条结果的 名称替代
试试:
select * from a inner join b on a.id=b.id
与
脚本处理的速度
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秒. 很久以前的事情了, 看到这个帖子突然想起来了.
你说SQL语句执行一遍速度快?还是执行两遍快?还在程序里处理?
数据库 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;然后 用脚本处理 这些得到的数据,额所以很想 知道 具体原因
#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;
}
如果这个你还相信这个别人的说法,则你完全可以做个试验,以测试结果来证明一下,到底什么是对的。
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#结帖
但是假如这个系统应用到了缓存,比如memcached什么的,并且那个b表,数据量巨大又经常到处被引用,而本身不太可能发生变化或者即使看到过期数据也没什么大问题(比如SNS里面用户名),如果对B表根据ID进行了缓存的话,分开查询确实效率更高。