1. A method comprising: generating a cursor for a previous query; wherein generating the cursor for the previous query includes generating an execution plan for the previous query that is based, at least in part, on a first characteristic that is present at a time when the cursor is generated for the previous query; wherein the first characteristic reflects at least one factor, independent of the previous query itself, that has an effect on the execution plan produced for the previous query; storing, in association with the cursor, first data that indicates the first characteristic; receiving a current query; in response to receiving the current query, determining whether the current query is semantically equivalent to the previous query; determining second data that indicates a second characteristic, present at a time when the current query is processed, that would have an effect on an execution plan of the current query if such an execution plan were to be generated for the current query; wherein the second characteristic reflects at least one factor independent of the current query itself; performing a comparison between the first data and the second data; when the current query is semantically equivalent to the previous query, determining, based on the comparison of the first data and the second data, whether compiling the current query would produce an execution plan that satisfies certain criteria; and in response to determining that compiling the current query would produce an execution plan that satisfies the certain criteria, executing the current query using the cursor that was previously generated for the previous query.