其实 就是 两个表,一个表里存了名字,一个表了存了对应的id,于是 我把语句写成 select a.* ,b.* from a,b where a.id=b.id
但是 别人马上告诉我 这个不对!应该写成2条语句,并且可以加快速度,求 原理
但是 别人马上告诉我 这个不对!应该写成2条语句,并且可以加快速度,求 原理
解决方案 »
- 你知道mysql启动后却无法登陆是什么原因不。要过一会才能登陆?
- 我想问一下mysql-5.0.18-win32这个版本支不支持在Win7上安装
- 查看一个表是什么时间创建的
- mysql数据库分表的问题
- 存储过程
- 关于mysql中插入的问题
- 100分再次求教MYSql 问题,希望大家帮我顶。
- mysql error 1215: Cannot add foreign key constraint
- access denied for user 'root'@'localhost'(using password:YES)
- 全文索引只在搜与内容开头相同的文字时才会有结果
- mysql5 游标操作的表,能够修改当前表的数据吗?
- mysql转换成excel
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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进行了缓存的话,分开查询确实效率更高。