数据库用的是mysql,一张大表t1,2000万的记录,一张小表t2,10万记录
第一次用中规中矩的
SELECT * FROM t1 LEFT JOIN t2 ON (t1.stuno=t2.stuno) where t2.spid=4;
结果很正常地出来了,花了76s,然后我有照着今天看的数据库原理里面说的,先查询,后连接,接着试了试
SELECT * FROM t1 LEFT JOIN (SELECT * FROM t2 WHERE spid=4) AS tt2 ON t1.stuno=tt2.stuno;
然后就溢出了
[Err] Out of memory
是不是我的sql语句有问题,新手不太会啊
第一次用中规中矩的
SELECT * FROM t1 LEFT JOIN t2 ON (t1.stuno=t2.stuno) where t2.spid=4;
结果很正常地出来了,花了76s,然后我有照着今天看的数据库原理里面说的,先查询,后连接,接着试了试
SELECT * FROM t1 LEFT JOIN (SELECT * FROM t2 WHERE spid=4) AS tt2 ON t1.stuno=tt2.stuno;
然后就溢出了
[Err] Out of memory
是不是我的sql语句有问题,新手不太会啊
解决方案 »
- mysql 编码问题,数据库中为 问号
- Mysql高手请进!!
- SQL慢查询优化
- 服务器数据库1个多G 导入本地数据库 失败(mysql)
- 听说mysql可以装个插件,就不用命令行输入。不知道那插件哪里下载
- mysql 存储过程循环插入问题
- 编译MySQL自带examples目录下的例子,提示找不到typelib.h
- 请问如何安装POSTGRESQL?可以安装在WINDOWS下吗?
- 如何建表???
- 创建触发器后不能进行修改操作,Can't update table 'psxt_user' in stored function/trigger because
- sql语句查询
- 看下这个mysql的存储过程游标,为什么报第三行错误恩
其实mysql自身就有做优化了,只是我还不知道。
SELECT * FROM t1 LEFT JOIN t2 ON (t1.stuno=t2.stuno) where t2.spid=4;
这句本身mysql本身就是先做查询然后再做外联了,所以速度相当快
而恰恰是脑抽的我犯了一个错,用了左联,应该用右联的,
所以SELECT * FROM t1 LEFT JOIN (SELECT * FROM t2 WHERE spid=4) AS tt2 ON t1.stuno=tt2.stuno;
这句话其实是一个2000w的表与一个小表做左联,那么结果应该也是2000w的,所以肯定慢啊。
抱歉耽误大家的时间,就当个笑话看吧