Re: No index only scan on md5 index

From: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
To: Adam Brusselback <adambrusselback(at)gmail(dot)com>
Cc: "pgsql-performance(at)postgresql(dot)org" <pgsql-performance(at)postgresql(dot)org>
Subject: Re: No index only scan on md5 index
Date: 2015-11-26 00:55:11
Message-ID: CAKFQuwYOkNAk0HdwwuQdJQK_jvvJmuWTcOa7yOvCevyqTaHFRw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

On Wednesday, November 25, 2015, Adam Brusselback <adambrusselback(at)gmail(dot)com>
wrote:

> Hey all,
>
> I have an attachment table in my database which stores a file in a bytea
> column, the file name, and the size of the file.
>
> Schema:
> CREATE TABLE attachment
> (
> attachment_id uuid NOT NULL DEFAULT gen_random_uuid(),
> attachment_name character varying NOT NULL,
> attachment_bytes_size integer NOT NULL,
> attachment_bytes bytea NOT NULL,
> CONSTRAINT attachment_pkey PRIMARY KEY (attachment_id)
> );
>
> I do lookups on this table based on the md5 of the attachment_bytes
> column, so I added an index:
> CREATE INDEX idx_attachment_bytes_md5 ON attachment
> ((md5(attachment_bytes)::uuid));
>
> Queries like this are sped up by the index no problem:
> SELECT attachment_id
> FROM attachment
> WHERE md5(attachment_bytes)::uuid = 'b2ab855ece13a72a398096dfb6c832aa';
>
> But if I wanted to return the md5 value, it seems to be totally unable to
> use an index only scan:
> SELECT md5(attachment_bytes)::uuid
> FROM attachment;
>
>
Ok.

Any reason not to add the uuid column to the table?

AFAIK The system is designed to return data from the heap, not an index.
While it possibly can in some instances if you need to return data you
should store it directly in the table.

David J.

In response to

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Tom Lane 2015-11-26 01:01:01 Re: No index only scan on md5 index
Previous Message Adam Brusselback 2015-11-26 00:25:30 No index only scan on md5 index