On 06/27/2011 03:18 PM, Martin Hansson wrote:
> Øystein Grøvlen skrev 2011-06-16 12.18:
>> My question is not whether ordered access is required or not, but whether this
>> is the only case where select-> quick is set, but not used.
> I'm sorry for the late answer. I'm also sorry to say I don't know. It's on my
> todo list to look this up, but I haven't gotten around to it yet.
The general rule in the code seems to be that if there is a quick, it will be
used. Unfortunately there are at least a few exceptions.
test_if_skip_sort_order() may e.g. destroy a previously created quick and
replace it with either a new quick or ref access.
I think it works like this when we reach JOIN::exec():
* If JOIN_TAB->type == JT_ALL and select->quick is set, range access is used.
* If JOIN_TAB->type == JT_REF ref access is used even if select->quick is set
But the optimizer may reconsider many times before that.
Jørgen Løland | Senior Software Engineer | +47 73842138