Did you try something like:

SELECT  id + 1 FROM foo WHERE id>= 100 AND id<  200 and id = MAX (id);



On 02/22/2010 7:02 AM, ArtemGr wrote:
> Simon Slavin<slav...@...>  writes:
>    
>> Just out of interest, and I know that theoretically this is not an optimal
>> statement, but have you compared
>> this with the results of putting the '+1' in the brackets ?
>>      
> Thanks for the pointer, Simon.
>
> Looking back to my analizys, I see that it was wrong.
>   SELECT MAX (id) FROM foo WHERE id>= 100 AND id<  200;
> actually jumps to Close directly after AggStep,
> it would only read a single row to produce the result.
>
> No suck luck for
>   SELECT MAX (id) + 1 FROM foo WHERE id>= 100 AND id<  200;
> which goes thru the whole range.
>
>
> As for MAX (id) + 1 versus MAX (id + 1),
>
> SELECT MAX (id) + 1 FROM foo WHERE id>= 100 AND id<  200;
> calculates MAX (id) in a cycle, then it adds 1 outside of the cycle,
> before submitting ResultRow.
>
> SELECT MAX (id + 1) FROM foo WHERE id>= 100 AND id<  200;
> increments id in every iteration of the cycle and passes the result to max.
>
> MAX (id + 1) is clearly less optimizable than MAX (id) + 1.
> Obvioulsy, SQLite already have a special case optimization for MAX (id),
> but optimization breaks with MAX (id) + 1, making it impractical for use in
> INSERT SELECT.
>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
>    
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to