当前位置:数据库 > MySQL >>

mysql 2个表的连接优化问题

比如A表有(id,a1,a2)列 B表有(id,b1,b2)列 其中B表中的b1列和A表的id列关联一对多的关系(b1可以存在多个相同的A表的id) 我要输出A表的内容 但是条件是: B表中b1中出现过A表中的id的列显示 B表b1列没有的id行 A就不输出 我的写法是 select * from A where (select * from B where B.b1=A.id limit 1) is not null; 这个语句虽然一开始能实现要求 但是到后来随着数据库数据的增加2表都几万条数据甚至几十万条,我再这么查,我的机子基本就崩溃了。 大家有什么好的优化办法吗?
答案:你的查询效率低的地方主要是执行了两次查询,第一次:select * from B where B.b1=A.it limit 1,
第二次:select * from A,这样效率会比较低,一般不建议这么做。
建议你用下面的方法来做,这么做只执行一次查询就可以得到你要的结果:
select distinct ta.* from a ta,b tb where ta.id=tb.b1;
其他:brightsu69 正解 表连接比用子查询要快好多的, SELECT A.* FROM A,B WHERE A.ID = B.B1;如果不想要重复的A表数据,就在前面加DISTINCT: SELECT DISTINCT A.* FROM A,B WHERE A.ID = B.B1; 

上一个:请教,mysql里面有个password()的密码函数. oracle有没有类似的函数?
下一个:Mysql语句,如何按两个不同条件查询数据~?

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,