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语句,如何按两个不同条件查询数据~?