大家好,在下遇到这么一个问题: select * from table where id in(xx,xx,x,xx,); 其中in()中的数据很多 ,有成千个甚至 4、5千个5、6千个。(总之就是超级多的意思) 这样sql 合理吗?如果不合理,有什么办法可以把上边的sql 给优化一下。 请各位大神不吝赐教
id 是主键,自动会存在索引,另外使用between也是不现实的,因为这个ID是不确定的[/quote]
这个id不需要确定,只要是连续的,确定首尾,
id 是主键,自动会存在索引,另外使用between也是不现实的,因为这个ID是不确定的[/quote]
如果id是连续的,首尾取出来[/quote]
sorry,我的意思可能没有表达清楚,ID就是不连续的,并且是不确定的[/quote]
用between局限性太多了,你in里面的数据是可以用查询语句查出来么?如果可以用exists
id 是主键,自动会存在索引,另外使用between也是不现实的,因为这个ID是不确定的[/quote]
这个id不需要确定,只要是连续的,确定首尾,
id 是主键,自动会存在索引,另外使用between也是不现实的,因为这个ID是不确定的[/quote]
如果id是连续的,首尾取出来[/quote]
sorry,我的意思可能没有表达清楚,ID就是不连续的,并且是不确定的
select * from A where id in(select id from B);
select a.* from A a where exists(select 1 from B b where a.id=b.id);
in()适合B表比A表数据小的情况
exists()适合B表比A表数据大的情况
当A表数据与B表数据一样大时,in与exists效率差不多,可任选一个使用.