Hi all,

I've got the following index on the gorfs.inode_segments table:

>
> CREATE INDEX ix_clientids
>   ON gorfs.inode_segments
>   USING btree
>   (("split_part"("full_path"::"text", '/'::"text", 4)::integer))
>   WHERE "gorfs"."is_kaminski_note_path"("full_path"::"text");


And I'm running the following Query:

> SELECT
> * FROM ( SELECT split_part(full_path, '/', 4)::INT AS account_id,
>        split_part(full_path, '/', 6)::INT AS note_id,
>        split_part(full_path, '/', 9)::TEXT AS variation,
>        st_size,
>        segment_index,
>        reverse(split_part(reverse(full_path), '/', 1)) as file_name,
>        i.st_ino,
>        full_path
> FROM gorfs.inodes i
> JOIN gorfs.inode_segments s
>   ON i.st_ino = s.st_ino_target
> WHERE i.checksum_md5 IS NOT NULL
>   AND s.full_path ~ '/userfiles/account/[0-9]+/[a-z]+/[0-9]+'
>   AND i.st_size > 0) as test WHERE account_id = 12225


*- But the query does not use the index... Why?*

Explain analyze:

> "Seq Scan on "inode_segments"  (cost=0.00..3047212.44 rows=524846
> width=63) (actual time=14212.466..51428.439 rows=31 loops=1)"
> "  Filter: ("split_part"(("full_path")::"text", '/'::"text", 4) =
> '12225'::"text")"
> "  Rows Removed by Filter: 104361402"
> "Total runtime: 51428.482 ms"


Cheers
Lucas

Reply via email to