Hi Jeff

Thank you for your reply.
I will try to learn about effective_cache_size .

Jian gao

2012/11/9 Jeff Janes <jeff.ja...@gmail.com>

> On Wed, Nov 7, 2012 at 11:41 PM, 高健 <luckyjack...@gmail.com> wrote:
>
>> Hi all:
>>
>>
>>
>> What confused me is that:  When I select data using order by  clause, I
>> got the following execution plan:
>>
>>
>>
>> postgres=# set session
>> enable_indexscan=true;
>>
>>
>> SET
>>
>>
>> postgres=# explain SELECT * FROM pg_proc ORDER BY
>> oid;
>>
>>
>>                                        QUERY
>> PLAN
>>
>>
>>
>> ----------------------------------------------------------------------------------------
>>
>>
>>  Index Scan using pg_proc_oid_index on pg_proc  (cost=0.00..321.60
>> rows=2490 width=552)
>>
>
>
> You should probably use sample cases much larger than this when trying to
> understand the planner.  With queries this small, it almost doesn't matter
> what plan is chosen.
>
>
>
>
>>
>>
>>
>>
>> (1
>> row)
>>
>>
>>
>>
>>
>> postgres=#
>>
>>
>>
>> My Question is :
>>
>>  If I want to find record using the where clause which hold the id
>> column,  the index scan might be used.
>>
>> But  I just want to get all the  records on sorted output format,  Why
>> index scan can be used here?
>>
>>
>>
>> I can’t imagine  that:
>>
>> Step 1 Index is read into memory, then for each tuple in it,
>>
>> Step 2 Then we got  the address of  related data block, and then access
>> the data block .
>>
>>
>>
>> Step 2 will be repeated for many times. I think it is not efficient.
>>
>
>
> But step 2 will repeatedly find the block it is visiting to already be in
> memory, so it is efficient.
>
>
>>
>>
>> Maybe the database system is clever enough to  accumulate data access for
>> same physical page, and  reduce the times of physical page acess ?
>>
>
> There is a bitmap scan which does that, but such a scan can't be used to
> fulfill a sort, because it doesn't return the rows in index order.  What
> reduces the cost here is the various levels of caching implemented by the
> file system, the memory system, and the CPU.  PG uses
> "effective_cache_size" to try to account for these effects, although I
> admit I don't quite understand what exactly it is doing in this case.  I
> thought that setting effective_cache_size to absurdly low values would make
> the index scan cost estimate go up a lot, but it only made it go up a
> little.
>
>
> Cheers,
>
> Jeff
>

Reply via email to