[SP-pm] DBIx::Class

Renato Santos renato.cron at gmail.com
Sun Sep 15 08:06:18 PDT 2013


No caso se email, poderia ser um index com as primeiras X posições.

Esse X poderia aumentar ou diminuir em relação a quantidade de registros.
 On Sep 15, 2013 11:59 AM, "Eden Cardim" <eden at insoli.de> wrote:

> >>>>> "André" == André Walker <andre at andrewalker.net> writes:
>
>     André> Será que isso é realmente necessário? Quer dizer... qual o
>     André> problema de ter um índice no campo email mesmo? De qualquer
>     André> forma, você já vai ter um custo computacional na função md5
>     André> (ainda que pequeno), e tenho a impressão que índices em
>     André> campos texto não são tão ruins assim. Talvez varie de SGBD
>     André> pra SGBD? Em PostgreSQL, por exemplo, seria relevante ter
>     André> essa coluna email_md5?
>
> Imagino que isso seja um "mysqlianismo". No postgresql não precisa da
> coluna adicional, você pode criar um índice pré-computado:
>
> CREATE INDEX email_md5 ON test (md5(email));
>
> No meu teste rápido aqui, ficou mais lento usar md5, imagino que seja
> por conta do custo computacional de calcular o md5 pra toda consulta.
> Porque depois do cálculo, a comparação com o índice é efetivamente a
> mesma. Aliás, eu só vejo algum benefício potencial em usar md5 se a
> string resultante do md5 for *menor* que a maioria das strings de
> email, e não me parece que seja esse o caso. Mesmo assim, o postgresql
> usa o tamanho da string como otimização de busca. Quando você
> normaliza tudo pruma string md5 com o mesmo tamanho perde-se essa
> otimização. De qualquer forma, tá aí:
>
> edenc=# \d test
>           Table "public.test"
>  Column |       Type        | Modifiers
> --------+-------------------+-----------
>  email  | character varying | not null
> Indexes:
>     "test_pkey" PRIMARY KEY, btree (email)
>     "email_md5" btree (md5(email::text))
>
> edenc=# explain select email from test where email =
> 'c4ca4238a0b923820dcc509a6f75849b';
>                                 QUERY PLAN
> --------------------------------------------------------------------------
>  Index Scan using test_pkey on test  (cost=0.00..8.54 rows=1 width=33)
>    Index Cond: ((email)::text = 'c4ca4238a0b923820dcc509a6f75849b'::text)
> (2 rows)
>
> edenc=# explain select email from test where md5(email) =
> md5('c4ca4238a0b923820dcc509a6f75849b');
>                                   QUERY PLAN
>
> -------------------------------------------------------------------------------
>  Index Scan using email_md5 on test  (cost=0.00..8.30 rows=1 width=33)
>    Index Cond: (md5((email)::text) =
> '28c8edde3d61a0411511d3b1866f0636'::text)
> (2 rows)
>
> https://gist.github.com/edenc/8ff84819c38bf19c3151
>
>               Rate    MissMD5     HitMD5 MissNormal  HitNormal
> MissMD5    52165/s         --        -5%        -8%       -13%
> HitMD5     55157/s         6%         --        -3%        -8%
> MissNormal 56948/s         9%         3%         --        -5%
> HitNormal  59701/s        14%         8%         5%         --
>
> --
> Eden Cardim -- Insolide Soluções de TI Ltda.
> +55 11 9644 8225
> http://insoli.de
> =begin disclaimer
>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130915/3a2cdba2/attachment-0001.html>


More information about the SaoPaulo-pm mailing list