Query not using index pgsql 8.2.3 - Mailing list pgsql-general
From | Henrik Zagerholm |
---|---|
Subject | Query not using index pgsql 8.2.3 |
Date | |
Msg-id | 89D7647F-4AE9-4EE6-A8F1-4EFCDE022C49@mac.se Whole thread Raw |
Responses |
Re: Query not using index pgsql 8.2.3
|
List | pgsql-general |
Hello list, I'm having a hard time understanding why my query is not using my indices when I change a field in the WHERE clause. Please could someone shed some light on this. Below is both queries and explain analyze for the different queries. Regards, Henrik QUERY 1. Using WHERE tbl_file_structure_id.fk_file_id = 1307249. SELECT max(pk_file_structure_id) as pk_object_id, max(fk_archive_id) AS fk_archive_id, file_name AS object_name, structure_path AS object_path, computer_name, file_ctime AS object_ctime, pk_computer_id, filetype_icon AS object_img, 'file' AS object_type, share_name, share_path, fk_file_id FROM tbl_file_structure JOIN tbl_file ON pk_file_id = fk_file_id JOIN tbl_structure ON pk_structure_id = fk_structure_id JOIN tbl_archive ON pk_archive_id = fk_archive_id JOIN tbl_share ON pk_share_id = fk_share_id JOIN tbl_computer ON pk_computer_id = fk_computer_id JOIN tbl_filetype ON pk_filetype_id = fk_filetype_id JOIN tbl_acl ON fk_file_structure_id = pk_file_structure_id WHERE archive_complete = true AND fk_file_id = 1307249 GROUP BY file_name, file_ctime, structure_path, pk_computer_id, filetype_icon, computer_name, share_name, share_path, fk_file_id ORDER BY object_name LIMIT 20 OFFSET 0 EXPLAIN FOR QUERY 1. As you can see uses INDEX SCAN on several tables. Limit (cost=8530.59..8531.49 rows=20 width=173) (actual time=1.938..1.942 rows=1 loops=1) -> GroupAggregate (cost=8530.59..8540.54 rows=221 width=173) (actual time=1.932..1.933 rows=1 loops=1) -> Sort (cost=8530.59..8531.14 rows=221 width=173) (actual time=1.762..1.787 rows=20 loops=1) Sort Key: tbl_file.file_name, tbl_file.file_ctime, tbl_structure.structure_path, tbl_computer.pk_computer_id, tbl_filetype.filetype_icon, tbl_computer.computer_name, tbl_share.share_name, tbl_share.share_path, tbl_file_structure.fk_file_id -> Hash Join (cost=4.41..8521.99 rows=221 width=173) (actual time=0.655..1.460 rows=20 loops=1) Hash Cond: (tbl_structure.fk_archive_id = tbl_archive.pk_archive_id) -> Nested Loop (cost=0.00..8514.54 rows=221 width=140) (actual time=0.184..0.904 rows=20 loops=1) -> Nested Loop (cost=0.00..820.46 rows=67 width=140) (actual time=0.154..0.558 rows=10 loops=1) -> Nested Loop (cost=0.00..280.40 rows=67 width=58) (actual time=0.123..0.287 rows=10 loops=1) -> Nested Loop (cost=0.00..9.73 rows=1 width=42) (actual time=0.087..0.179 rows=1 loops=1) Join Filter: (tbl_filetype.pk_filetype_id = tbl_file.fk_filetype_id) -> Index Scan using tbl_file_pkey on tbl_file (cost=0.00..8.28 rows=1 width=40) (actual time=0.053..0.056 rows=1 loops=1) Index Cond: (1307249 = pk_file_id) -> Seq Scan on tbl_filetype (cost=0.00..1.20 rows=20 width=18) (actual time=0.012..0.036 rows=20 loops=1) -> Index Scan using tbl_file_structure_idx on tbl_file_structure (cost=0.00..270.00 rows=67 width=24) (actual time=0.030..0.073 rows=10 loops=1) Index Cond: (fk_file_id = 1307249) -> Index Scan using tbl_structure_pkey on tbl_structure (cost=0.00..8.05 rows=1 width=98) (actual time=0.018..0.020 rows=1 loops=10) Index Cond: (tbl_structure.pk_structure_id = tbl_file_structure.fk_structure_id) -> Index Scan using tbl_acl_idx on tbl_acl (cost=0.00..114.29 rows=44 width=8) (actual time=0.021..0.025 rows=2 loops=10) Index Cond: (tbl_acl.fk_file_structure_id = tbl_file_structure.pk_file_structure_id) -> Hash (cost=4.00..4.00 rows=33 width=41) (actual time=0.444..0.444 rows=33 loops=1) -> Hash Join (cost=2.21..4.00 rows=33 width=41) (actual time=0.134..0.343 rows=33 loops=1) Hash Cond: (tbl_archive.fk_share_id = tbl_share.pk_share_id) -> Seq Scan on tbl_archive (cost=0.00..1.33 rows=33 width=16) (actual time=0.018..0.086 rows=33 loops=1) Filter: archive_complete -> Hash (cost=2.16..2.16 rows=4 width=41) (actual time=0.097..0.097 rows=4 loops=1) -> Hash Join (cost=1.07..2.16 rows=4 width=41) (actual time=0.058..0.082 rows=4 loops=1) Hash Cond: (tbl_share.fk_computer_id = tbl_computer.pk_computer_id) -> Seq Scan on tbl_share (cost=0.00..1.04 rows=4 width=29) (actual time=0.007..0.013 rows=4 loops=1) -> Hash (cost=1.03..1.03 rows=3 width=20) (actual time=0.031..0.031 rows=3 loops=1) -> Seq Scan on tbl_computer (cost=0.00..1.03 rows=3 width=20) (actual time=0.009..0.015 rows=3 loops=1) Total runtime: 2.534 ms ======================================================================== ============== ======================================================================== ============== QUERY 2. Using WHERE tbl_file.fk_filetype_id = 83. SELECT max(pk_file_structure_id) as pk_object_id, max(fk_archive_id) AS fk_archive_id, file_name AS object_name, structure_path AS object_path, computer_name, file_ctime AS object_ctime, pk_computer_id, filetype_icon AS object_img, 'file' AS object_type, share_name, share_path, fk_file_id FROM tbl_file_structure JOIN tbl_file ON pk_file_id = fk_file_id JOIN tbl_structure ON pk_structure_id = fk_structure_id JOIN tbl_archive ON pk_archive_id = fk_archive_id JOIN tbl_share ON pk_share_id = fk_share_id JOIN tbl_computer ON pk_computer_id = fk_computer_id JOIN tbl_filetype ON pk_filetype_id = fk_filetype_id JOIN tbl_acl ON fk_file_structure_id = pk_file_structure_id WHERE archive_complete = true AND fk_filetype_id = 83 GROUP BY file_name, file_ctime, structure_path, pk_computer_id, filetype_icon, computer_name, share_name, share_path, fk_file_id ORDER BY object_name LIMIT 20 OFFSET 0 EXPLAIN FOR QUERY 2. As you can see uses Bitmap Heap Scan on tbl_file.fk_filetype_id BUT SEQ SCAN on all other tables. The query cost speaks for itself. Limit (cost=150979.11..150980.01 rows=20 width=173) (actual time=25329.586..25330.167 rows=20 loops=1) -> GroupAggregate (cost=150979.11..152886.93 rows=42396 width=173) (actual time=25329.580..25330.118 rows=20 loops=1) -> Sort (cost=150979.11..151085.10 rows=42396 width=173) (actual time=25329.520..25329.614 rows=73 loops=1) Sort Key: tbl_file.file_name, tbl_file.file_ctime, tbl_structure.structure_path, tbl_computer.pk_computer_id, tbl_filetype.filetype_icon, tbl_computer.computer_name, tbl_share.share_name, tbl_share.share_path, tbl_file_structure.fk_file_id -> Nested Loop (cost=42435.52..144024.63 rows=42396 width=173) (actual time=8199.229..25311.927 rows=730 loops=1) -> Seq Scan on tbl_filetype (cost=0.00..1.25 rows=1 width=18) (actual time=0.132..0.153 rows=1 loops=1) Filter: (83 = pk_filetype_id) -> Hash Join (cost=42435.52..143599.42 rows=42396 width=171) (actual time=8199.077..25309.420 rows=730 loops=1) Hash Cond: (tbl_structure.fk_archive_id = tbl_archive.pk_archive_id) -> Hash Join (cost=42431.11..143012.07 rows=42396 width=138) (actual time=8198.468..25305.206 rows=730 loops=1) Hash Cond: (tbl_file_structure.fk_structure_id = tbl_structure.pk_structure_id) -> Hash Join (cost=31898.88..128061.91 rows=42396 width=56) (actual time=5947.642..22602.311 rows=730 loops=1) Hash Cond: (tbl_acl.fk_file_structure_id = tbl_file_structure.pk_file_structure_id) -> Seq Scan on tbl_acl (cost=0.00..79136.22 rows=4427422 width=8) (actual time=0.092..8887.385 rows=4427422 loops=1) -> Hash (cost=31738.31..31738.31 rows=12846 width=56) (actual time=5801.353..5801.353 rows=330 loops=1) -> Hash Join (cost=2094.84..31738.31 rows=12846 width=56) (actual time=292.297..5798.486 rows=330 loops=1) Hash Cond: (tbl_file_structure.fk_file_id = tbl_file.pk_file_id) -> Seq Scan on tbl_file_structure (cost=0.00..24484.55 rows=1341455 width=24) (actual time=13.953..3090.936 rows=1341455 loops=1) -> Hash (cost=2079.20..2079.20 rows=1251 width=40) (actual time=180.500..180.500 rows=112 loops=1) -> Bitmap Heap Scan on tbl_file (cost=25.96..2079.20 rows=1251 width=40) (actual time=22.210..180.109 rows=112 loops=1) Recheck Cond: (fk_filetype_id = 83) -> Bitmap Index Scan on tbl_file_idx6 (cost=0.00..25.65 rows=1251 width=0) (actual time=21.958..21.958 rows=112 loops=1) Index Cond: (fk_filetype_id = 83) -> Hash (cost=5576.88..5576.88 rows=176188 width=98) (actual time=1859.992..1859.992 rows=176188 loops=1) -> Seq Scan on tbl_structure (cost=0.00..5576.88 rows=176188 width=98) (actual time=7.321..1062.527 rows=176188 loops=1) -> Hash (cost=4.00..4.00 rows=33 width=41) (actual time=0.574..0.574 rows=33 loops=1) -> Hash Join (cost=2.21..4.00 rows=33 width=41) (actual time=0.264..0.474 rows=33 loops=1) Hash Cond: (tbl_archive.fk_share_id = tbl_share.pk_share_id) -> Seq Scan on tbl_archive (cost=0.00..1.33 rows=33 width=16) (actual time=0.054..0.122 rows=33 loops=1) Filter: archive_complete -> Hash (cost=2.16..2.16 rows=4 width=41) (actual time=0.190..0.190 rows=4 loops=1) -> Hash Join (cost=1.07..2.16 rows=4 width=41) (actual time=0.148..0.170 rows=4 loops=1) Hash Cond: (tbl_share.fk_computer_id = tbl_computer.pk_computer_id) -> Seq Scan on tbl_share (cost=0.00..1.04 rows=4 width=29) (actual time=0.049..0.055 rows=4 loops=1) -> Hash (cost=1.03..1.03 rows=3 width=20) (actual time=0.073..0.073 rows=3 loops=1) -> Seq Scan on tbl_computer (cost=0.00..1.03 rows=3 width=20) (actual time=0.050..0.058 rows=3 loops=1) Total runtime: 25330.924 ms
pgsql-general by date: