SQL问题

这三条SQL语句中的第三条语句的效果不同于前两条语句。

在第一个SQL语句中,Tbl1和tbl2是左连接的。如果有很多条记录具有相同的TBL id(假设有10000条记录具有相同的id),那么左连接后该语句的数据量非常大,然后进行分组过滤得到最大的一条,性能相对较低。但是,如果tbl1中有多个记录具有相同的id、itme和name,则最终结果中不会有重复的记录。

在第二条SQL语句中,首先将两种tbl2简单分组。如果有很多相同id的记录,这个SQL语句在进行左连接时会先过滤掉很大一部分数据,这样可以很好的提高性能。但是,如果tbl1中有重复数据,则此SQL查询的结果中可能会有重复记录。如果确定tbl1中没有重复,建议使用此sql。如果有重复,可以在select中添加一个不同的语句。当然性能会降低。

可以说第三条sql语句基本是不正确的SQL语句,id是max,最后只有一条记录。id是记录中最大的,itme是查询中最大的,name是最大的,time是可以保持连接的数据中最大的。所以这个sql应该说是没有意义的sql。

对于sql查询,如果想测试它的性能,如果是Oracle,可以用执行计划来检查SQL的执行情况,也可以看看执行时间。细节还是很复杂的。建议学习《甲骨文编程的艺术》这本书,里面有相关的说明。

如果是SQLServer,不好意思,我也不知道怎么研究。但是有一点:连接的时候,如果是二级表(上面的tbl2可以认为是二级表),那么如果能大量减少连接数据量,性能会提高很多。数据量大不仅占用了CPU的处理时间,更重要的是可能会增加大量的IO操作,从而消耗大量的时间。