BDDNF=# select count(ID_ITEM) from DECLARACAO DEC  inner join CADASTRO CAD on (CAD.ID_DECLARACAO=DEC.ID_DECLARACAO)     inner join NOTA_FISCAL NF on (NF.ID_CADASTRO=CAD.ID_CADASTRO) inner join ITEM_NOTA INF on (INF.ID_NF=NF.ID_NF) where DEC.ID_ARQUIVO=1




BDDNF=# explain  analyze select * from DECLARACAO DEC  inner join CADASTRO CAD on (CAD.ID_DECLARACAO=DEC.ID_DECLARACAO)     inner join NOTA_FISCAL NF on (NF.ID_CADASTRO=CAD.ID_CADASTRO) inner join ITEM_NOTA INF on (INF.ID_NF=NF.ID_NF) where DEC.ID_ARQUIVO=1;
                                                                                       QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Hash Join  (cost=139471.35..405455.18 rows=1136591 width=773) (actual time=76507.141..270706.607 rows=1151043 loops=1)
   Hash Cond: ("outer".id_nf = "inner".id_nf)
   ->  Index Scan using fki_item_nota_id_nf_fkey on item_nota inf  (cost=0.00..73824.94 rows=2359722 width=159) (actual time=1.029..106939.980 rows=2359722 loops=1)
   ->  Hash  (cost=81476.61..81476.61 rows=710696 width=614) (actual time=57419.178..57419.178 rows=719746 loops=1)
         ->  Merge Join  (cost=2939.93..81476.61 rows=710696 width=614) (actual time=723.066..41831.345 rows=719746 loops=1)
               Merge Cond: ("outer".id_cadastro = "inner".id_cadastro)
               ->  Sort  (cost=2939.93..2958.54 rows=7447 width=407) (actual time=668.990..692.960 rows=7467 loops=1)
                     Sort Key: cad.id_cadastro
                     ->  Merge Join  (cost=0.00..1564.99 rows=7447 width=407) (actual time=17.911..493.106 rows=7467 loops=1)
                           Merge Cond: ("outer".id_declaracao = "inner".id_declaracao)
                           ->  Index Scan using idxpkdeclaracao on declaracao "dec"  (cost=0.00..642.85 rows=4699 width=112) (actual time=17.886..444.459 rows=4667 loops=1)
                                 Filter: (id_arquivo = 1)
                           ->  Index Scan using fki_cadastro_id_declaracao_fkey on cadastro cad  (cost=0.00..797.28 rows=15461 width=295) (actual time=0.011..14.208 rows=7468 loops=1)
               ->  Index Scan using fki_nota_fiscal_id_cadastro_fkey on nota_fiscal nf  (cost=0.00..67703.74 rows=1475504 width=207) (actual time=54.042..38823.627 rows=719747 loops=1)
 Total runtime: 271554.208 ms
(15 registros)

BDDNF=#create index idx_id_declaracao on CADASTRO (ID_DECLARACAO);
BDDNF=#create index idx_declaracao_id_declaracao on DECLARACAO (ID_DECLARACAO);


BDDNF=# explain  analyze select * from DECLARACAO DEC  inner join CADASTRO CAD on (CAD.ID_DECLARACAO=DEC.ID_DECLARACAO)     inner join NOTA_FISCAL NF on (NF.ID_CADASTRO=CAD.ID_CADASTRO) inner join ITEM_NOTA INF on (INF.ID_NF=NF.ID_NF) where DEC.ID_ARQUIVO=1;
                                                                                       QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Hash Join  (cost=122918.58..388915.54 rows=1133356 width=773) (actual time=82162.396..253585.881 rows=1151043 loops=1)
   Hash Cond: ("outer".id_nf = "inner".id_nf)
   ->  Index Scan using fki_item_nota_id_nf_fkey on item_nota inf  (cost=0.00..73855.73 rows=2362521 width=159) (actual time=12.176..85268.589 rows=2359722 loops=1)
   ->  Hash  (cost=64916.60..64916.60 rows=710793 width=614) (actual time=62438.315..62438.315 rows=719746 loops=1)
         ->  Merge Join  (cost=8754.00..64916.60 rows=710793 width=614) (actual time=272.247..46311.271 rows=719746 loops=1)
               Merge Cond: ("outer".id_cadastro = "inner".id_cadastro)
               ->  Sort  (cost=8754.00..8772.54 rows=7417 width=407) (actual time=263.377..287.419 rows=7467 loops=1)
                     Sort Key: cad.id_cadastro
                     ->  Merge Join  (cost=0.00..7383.93 rows=7417 width=407) (actual time=0.228..73.276 rows=7467 loops=1)
                           Merge Cond: ("outer".id_declaracao = "inner".id_declaracao)
                           ->  Index Scan using idx_declaracao_id_declaracao on declaracao "dec"  (cost=0.00..1685.63 rows=4680 width=112) (actual time=0.108..17.190 rows=4667 loops=1)
                                 Filter: (id_arquivo = 1)
                           ->  Index Scan using idx_id_declaracao on cadastro cad  (cost=0.00..5574.50 rows=15461 width=295) (actual time=0.105..22.214 rows=7468 loops=1)
               ->  Index Scan using fki_nota_fiscal_id_cadastro_fkey on nota_fiscal nf  (cost=0.00..45313.41 rows=1481674 width=207) (actual time=8.847..43775.457 rows=719747 loops=1)
 Total runtime: 254392.788 ms
(15 registros)

BDDNF=# create index idx_nf_id_cadastro on NOTA_FISCAL (ID_CADASTRO);
BDDNF=# create index idx_cad_id_cadastro on CADASTRO (ID_CADASTRO);
BDDNF=# create index idx_inf_id_nf on ITEM_NOTA (ID_NF);
BDDNF=# create index idx_nf_id_nf on NOTA_FISCAL (ID_NF);
BDDNF=# create index idx_dec_id_arquivo_1 on DECLARACAO (ID_ARQUIVO) where ID_ARQUIVO=1;
BDDNF=# analyze;
BDDNF=# explain  analyze select * from DECLARACAO DEC  inner join CADASTRO CAD on (CAD.ID_DECLARACAO=DEC.ID_DECLARACAO)     inner join NOTA_FISCAL NF on (NF.ID_CADASTRO=CAD.ID_CADASTRO) inner join ITEM_NOTA INF on (INF.ID_NF=NF.ID_NF) where DEC.ID_ARQUIVO=1;
                                                                                       QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Hash Join  (cost=121418.04..383604.27 rows=1111625 width=773) (actual time=58425.122..223773.698 rows=1151043 loops=1)
   Hash Cond: ("outer".id_nf = "inner".id_nf)
   ->  Index Scan using idx_inf_id_nf on item_nota inf  (cost=0.00..73811.17 rows=2358561 width=159) (actual time=0.166..92538.647 rows=2359722 loops=1)
   ->  Hash  (cost=64774.70..64774.70 rows=694138 width=614) (actual time=40770.203..40770.203 rows=719746 loops=1)
         ->  Merge Join  (cost=8899.51..64774.70 rows=694138 width=614) (actual time=303.751..24893.018 rows=719746 loops=1)
               Merge Cond: ("outer".id_cadastro = "inner".id_cadastro)
               ->  Sort  (cost=8899.51..8917.72 rows=7287 width=408) (actual time=286.727..310.378 rows=7467 loops=1)
                     Sort Key: cad.id_cadastro
                     ->  Merge Join  (cost=0.00..7557.65 rows=7287 width=408) (actual time=0.256..114.975 rows=7467 loops=1)
                           Merge Cond: ("outer".id_declaracao = "inner".id_declaracao)
                           ->  Index Scan using idx_declaracao_id_declaracao on declaracao "dec"  (cost=0.00..2127.26 rows=4598 width=112) (actual time=0.087..36.582 rows=4667 loops=1)
                                 Filter: (id_arquivo = 1)
                           ->  Index Scan using idx_id_declaracao on cadastro cad  (cost=0.00..5309.79 rows=15461 width=296) (actual time=0.154..43.646 rows=7468 loops=1)
               ->  Index Scan using idx_nf_id_cadastro on nota_fiscal nf  (cost=0.00..45215.46 rows=1472769 width=206) (actual time=17.001..22350.822 rows=719747 loops=1)
 Total runtime: 224580.111 ms
(15 registros)

BDDNF=# cluster idx_inf_id_nf on ITEM_NOTA;
BDDNF=# cluster idx_declaracao_id_declaracao on DECLARACAO;
BDDNF=# cluster idx_id_declaracao on CADASTRO;
BDDNF=# cluster idx_nf_id_cadastro on NOTA_FISCAL;
BDDNF=# analyze;
BDDNF=# explain  analyze select * from DECLARACAO DEC  inner join CADASTRO CAD on (CAD.ID_DECLARACAO=DEC.ID_DECLARACAO)     inner join NOTA_FISCAL NF on (NF.ID_CADASTRO=CAD.ID_CADASTRO) inner join ITEM_NOTA INF on (INF.ID_NF=NF.ID_NF) where DEC.ID_ARQUIVO=1;
                                                                                      QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Hash Join  (cost=117048.27..379708.65 rows=1119079 width=770) (actual time=98323.858..331804.810 rows=1151043 loops=1)
   Hash Cond: ("outer".id_nf = "inner".id_nf)
   ->  Index Scan using idx_inf_id_nf on item_nota inf  (cost=0.00..73821.78 rows=2359162 width=160) (actual time=14.529..148450.967 rows=2359722 loops=1)
   ->  Hash  (cost=60035.62..60035.62 rows=698663 width=610) (actual time=62711.725..62711.725 rows=719746 loops=1)
         ->  Merge Join  (cost=4111.57..60035.62 rows=698663 width=610) (actual time=387.706..39761.871 rows=719746 loops=1)
               Merge Cond: ("outer".id_cadastro = "inner".id_cadastro)
               ->  Sort  (cost=4111.57..4129.91 rows=7334 width=405) (actual time=386.483..729.106 rows=7467 loops=1)
                     Sort Key: cad.id_cadastro
                     ->  Hash Join  (cost=188.05..2760.97 rows=7334 width=405) (actual time=28.603..199.291 rows=7467 loops=1)
                           Hash Cond: ("outer".id_declaracao = "inner".id_declaracao)
                           ->  Index Scan using idx_id_declaracao on cadastro cad  (cost=0.00..2306.32 rows=15461 width=294) (actual time=0.077..118.615 rows=15461 loops=1)
                           ->  Hash  (cost=176.48..176.48 rows=4628 width=111) (actual time=28.479..28.479 rows=4667 loops=1)
                                 ->  Index Scan using idx_dec_id_arquivo_1 on declaracao "dec"  (cost=0.00..176.48 rows=4628 width=111) (actual time=0.366..21.773 rows=4667 loops=1)
                                       Index Cond: (id_arquivo = 1)
               ->  Index Scan using idx_nf_id_cadastro on nota_fiscal nf  (cost=0.00..45218.58 rows=1472871 width=205) (actual time=1.194..36311.857 rows=719747 loops=1)
 Total runtime: 332637.362 ms
(16 registros)

BDDNF=#
BDDNF=# show all;
              name               |                           setting                |                                         description
---------------------------------+--------------------------------------------------------------+----------------------------------------------------------------------------------------------
 add_missing_from                | off	                | Automatically adds missing table references to FROM clauses.
 archive_command                 | unset                | WAL archiving command.
 australian_timezones            | off                | Interprets ACST, CST, EST, and SAT as Australian time zones.
 authentication_timeout          | 60                | Sets the maximum time in seconds to complete client authentication.
 autovacuum                      | off                | Starts the autovacuum subprocess.
 autovacuum_analyze_scale_factor | 0.2                | Number of tuple inserts, updates or deletes prior to analyze as a fraction of reltuples.
 autovacuum_analyze_threshold    | 500                | Minimum number of tuple inserts, updates or deletes prior to analyze.
 autovacuum_naptime              | 60                | Time to sleep between autovacuum runs, in seconds.
 autovacuum_vacuum_cost_delay    | -1                | Vacuum cost delay in milliseconds, for autovacuum.
 autovacuum_vacuum_cost_limit    | -1                | Vacuum cost amount available before napping, for autovacuum.
 autovacuum_vacuum_scale_factor  | 0.4                | Number of tuple updates or deletes prior to vacuum as a fraction of reltuples.
 autovacuum_vacuum_threshold     | 1000                | Minimum number of tuple updates or deletes prior to vacuum.
 bgwriter_all_maxpages           | 5                | Background writer maximum number of all pages to flush per round
 bgwriter_all_percent            | 0.333                | Background writer percentage of all buffers to flush per round
 bgwriter_delay                  | 2000                | Background writer sleep time between rounds in milliseconds
 bgwriter_lru_maxpages           | 5                | Background writer maximum number of LRU pages to flush per round
 bgwriter_lru_percent            | 1                | Background writer percentage of LRU buffers to flush per round
 block_size                      | 8192                | Shows size of a disk block
 bonjour_name                    | unset                | Sets the Bonjour broadcast service name.
 check_function_bodies           | on                | Check function bodies during CREATE FUNCTION.
 checkpoint_segments             | 8                | Sets the maximum distance in log segments between automatic WAL checkpoints.
 checkpoint_timeout              | 800                | Sets the maximum time in seconds between automatic WAL checkpoints.
 checkpoint_warning              | 30                | Logs if filling of checkpoint segments happens more frequently than this (in seconds).
 client_encoding                 | LATIN1                | Sets the client's character set encoding.
 client_min_messages             | notice                | Sets the message levels that are sent to the client.
 commit_delay                    | 0                | Sets the delay in microseconds between transaction commit and flushing WAL to disk.
 commit_siblings                 | 5                | Sets the minimum concurrent open transactions before performing commit_delay.
 config_file                     | C:/Arquivos de programas/PostgreSQL/8.1/data/postgresql.conf | Sets the server's main configuration file.
 constraint_exclusion            | off                | Enables the planner to use constraints to optimize queries.
 cpu_index_tuple_cost            | 0.001                | Sets the planner's estimate of processing cost for each index tuple (row) during index scan.
 cpu_operator_cost               | 0.0025                | Sets the planner's estimate of processing cost of each operator in WHERE.
 cpu_tuple_cost                  | 0.01                | Sets the planner's estimate of the cost of processing each tuple (row).
 custom_variable_classes         | unset                | Sets the list of known custom variable classes.
 data_directory                  | C:/Arquivos de programas/PostgreSQL/8.1/data                | Sets the server's data directory.
 DateStyle                       | ISO, MDY                | Sets the display format for date and time values.
 db_user_namespace               | off                | Enables per-database user names.
 deadlock_timeout                | 1000                | The time in milliseconds to wait on lock before checking for deadlock.
 debug_pretty_print              | off                | Indents parse and plan tree displays.
 debug_print_parse               | off                | Prints the parse tree to the server log.
 debug_print_plan                | off                | Prints the execution plan to server log.
 debug_print_rewritten           | off                | Prints the parse tree after rewriting to server log.
 default_statistics_target       | 10                | Sets the default statistics target.
 default_tablespace              | unset                | Sets the default tablespace to create tables and indexes in.
 default_transaction_isolation   | read committed                | Sets the transaction isolation level of each new transaction.
 default_transaction_read_only   | off                | Sets the default read-only status of new transactions.
 default_with_oids               | off                | Create new tables with OIDs by default.
 dynamic_library_path            | $libdir                | Sets the path for dynamically loadable modules.
 effective_cache_size            | 1000                | Sets the planner's assumption about size of the disk cache.
 enable_bitmapscan               | off                | Enables the planner's use of bitmap-scan plans.
 enable_hashagg                  | on                | Enables the planner's use of hashed aggregation plans.
 enable_hashjoin                 | on                | Enables the planner's use of hash join plans.
 enable_indexscan                | on                | Enables the planner's use of index-scan plans.
 enable_mergejoin                | on                | Enables the planner's use of merge join plans.
 enable_nestloop                 | on                | Enables the planner's use of nested-loop join plans.
 enable_seqscan                  | off                | Enables the planner's use of sequential-scan plans.
 enable_sort                     | on                | Enables the planner's use of explicit sort steps.
 enable_tidscan                  | on                | Enables the planner's use of TID scan plans.
 escape_string_warning           | off                | Warn about backslash escapes in ordinary string literals.
 explain_pretty_print            | on                | Uses the indented output format for EXPLAIN VERBOSE.
 external_pid_file               | unset                | Writes the postmaster PID to the specified file.
 extra_float_digits              | 0                | Sets the number of digits displayed for floating-point values.
 from_collapse_limit             | 8                | Sets the FROM-list size beyond which subqueries are not collap
sed.
 fsync                           | on                | Forces synchronization of updates to disk.
 full_page_writes                | on                | Writes full pages to WAL when first modified after a checkpoint.
 geqo                            | on                | Enables genetic query optimization.
 geqo_effort                     | 5                | GEQO: effort is used to set the default for other GEQO parameters.
 geqo_generations                | 0                | GEQO: number of iterations of the algorithm.
 geqo_pool_size                  | 0                | GEQO: number of individuals in the population.
 geqo_selection_bias             | 2                | GEQO: selective pressure within the population.
 geqo_threshold                  | 2                | Sets the threshold of FROM items beyond which GEQO is used.
 hba_file                        | C:/Arquivos de programas/PostgreSQL/8.1/data/pg_hba.conf     | Sets the server's "hba" configuration file
 ident_file                      | C:/Arquivos de programas/PostgreSQL/8.1/data/pg_ident.conf   | Sets the server's "ident" configuration file
 integer_datetimes               | off                | Datetimes are integer based.
 join_collapse_limit             | 8                | Sets the FROM-list size beyond which JOIN constructs are not flattened.
 krb_caseins_users               | off                | Sets whether Kerberos user names should be treated as case-insensitive.
 krb_server_hostname             | unset                | Sets the hostname of the Kerberos server.
 krb_server_keyfile              | FILE:/usr/local/pgsql/etc/krb5.keytab                | Sets the location of the Kerberos server key file.
 krb_srvname                     | postgres                | Sets the name of the Kerberos service.
 lc_collate                      | C                | Shows the collation order locale.
 lc_ctype                        | C                | Shows the character classification and case conversion locale.
 lc_messages                     | C                | Sets the language in which messages are displayed.
 lc_monetary                     | C                | Sets the locale for formatting monetary amounts.
 lc_numeric                      | C                | Sets the locale for formatting numbers.
 lc_time                         | C                | Sets the locale for formatting date and time values.
 listen_addresses                | *                | Sets the host name or IP address(es) to listen to.
 log_connections                 | off                | Logs each successful connection.
 log_destination                 | stderr                | Sets the destination for server log output.
 log_directory                   | pg_log                | Sets the destination directory for log files.
 log_disconnections              | off                | Logs end of a session, including duration.
 log_duration                    | off                | Logs the duration of each completed SQL statement.
 log_error_verbosity             | default                | Sets the verbosity of logged messages.
 log_executor_stats              | off                | Writes executor performance statistics to the server log.
 log_filename                    | postgresql-%Y-%m-%d_%H%M%S.log                | Sets the file name pattern for log files.
 log_hostname                    | off                | Logs the host name in the connection logs.
 log_line_prefix                 | %t                | Controls information prefixed to each log line
 log_min_duration_statement      | -1                | Sets the minimum execution time in milliseconds above which statements will be logged.
 log_min_error_statement         | panic                | Causes all statements generating error at or above this level to be logged.
 log_min_messages                | notice                | Sets the message levels that are logged.
 log_parser_stats                | off                | Writes parser performance statistics to the server log.
 log_planner_stats               | off                | Writes planner performance statistics to the server log.
 log_rotation_age                | 1440                | Automatic log file rotation will occur after N minutes
 log_rotation_size               | 10240                | Automatic log file rotation will occur after N kilobytes
 log_statement                   | none                | Sets the type of statements logged.
 log_statement_stats             | off                | Writes cumulative performance statistics to the server log.
 log_truncate_on_rotation        | off                | Truncate existing log files of same name during log rotation.
 maintenance_work_mem            | 16384                | Sets the maximum memory to be used for maintenance operations.
 max_connections                 | 10                | Sets the maximum number of concurrent connections.
 max_files_per_process           | 1000                | Sets the maximum number of simultaneously open files for eachserver process.
 max_fsm_pages                   | 20000                | Sets the maximum number of disk pages for which free space is tracked.
 max_fsm_relations               | 1000                | Sets the maximum number of tables and indexes for which free space is tracked.
 max_function_args               | 100                | Shows the maximum number of function arguments.
 max_identifier_length           | 63                | Shows the maximum identifier length
 max_index_keys                  | 32                | Shows the maximum number of index keys.
 max_locks_per_transaction       | 64                | Sets the maximum number of locks per transaction.
 max_prepared_transactions       | 20                | Sets the maximum number of simultaneously prepared transactions.
 max_stack_depth                 | 2048                | Sets the maximum stack depth, in kilobytes.
 password_encryption             | on                | Encrypt passwords.
 port                            | 5432                | Sets the TCP port the server listens on.
 pre_auth_delay                  | 0                | no description available
 preload_libraries               | unset                | Lists shared libraries to preload into server.
 random_page_cost                | 4                | Sets the planner's estimate of the cost of a nonsequentially fetched disk page.
 redirect_stderr                 | on                | Start a subprocess to capture stderr output into log files.
 regex_flavor                    | advanced                | Sets the regular expression "flavor".
 search_path                     | $user,public                | Sets the schema search order for names that are not schema-qualified.
 server_encoding                 | LATIN1                | Sets the server (database) character set encoding.
 server_version                  | 8.1.2                | Shows the server version.
 shared_buffers                  | 1000                | Sets the number of shared memory buffers used by the server.
 silent_mode                     | off                | Runs the server silently.
 sql_inheritance                 | on                | Causes subtables to be included by default in various commands.
 ssl                             | off                | Enables SSL connections.
 standard_conforming_strings     | off                | '...' strings treat backslashes literally.
 statement_timeout               | 0                | Sets the maximum allowed duration (in milliseconds) of any statement.
 stats_block_level               | off                | Collects block-level statistics on database activity.
 stats_command_string            | off                | Collects statistics about executing commands.
 stats_reset_on_server_start     | off                | Zeroes collected statistics on server restart.
 stats_row_level                 | off                | Collects row-level statistics on database activity.
 stats_start_collector           | on                | Starts the server statistics-collection subprocess.
 superuser_reserved_connections  | 2                | Sets the number of connection slots reserved for superusers.
 tcp_keepalives_count            | 0                | Maximum number of TCP keepalive retransmits.
 tcp_keepalives_idle             | 0                | Seconds between issuing TCP keepalives.
 tcp_keepalives_interval         | 0                | Seconds between TCP keepalive retransmits.
 temp_buffers                    | 10000                | Sets the maximum number of temporary buffers used by each session.
 TimeZone                        | GMT3                | Sets the time zone for displaying and interpreting time stamps.
 trace_notify                    | off                | Generates debugging output for LISTEN and NOTIFY.
 trace_sort                      | off                | Emit information about resource usage in sorting.
 transaction_isolation           | read committed                | Sets the current transaction's isolation level.
 transaction_read_only           | off                | Sets the current transaction's read-only status.
 transform_null_equals           | off                | Treats "expr=NULL" as "expr IS NULL".
 unix_socket_directory           | unset                | Sets the directory where the Unix-domain socket will be created.
 unix_socket_group               | unset                | Sets the owning group of the Unix-domain socket.
 unix_socket_permissions         | 511                | Sets the access permissions of the Unix-domain socket.
 vacuum_cost_delay               | 0                | Vacuum cost delay in milliseconds.
 vacuum_cost_limit               | 200                | Vacuum cost amount available before napping.
 vacuum_cost_page_dirty          | 20                | Vacuum cost for a page dirtied by vacuum.
 vacuum_cost_page_hit            | 1                | Vacuum cost for a page found in the buffer cache.
 vacuum_cost_page_miss           | 10                | Vacuum cost for a page not found in the buffer cache.
 wal_buffers                     | 8                | Sets the number of disk-page buffers in shared memory for WAL.
 wal_sync_method                 | open_datasync                | Selects the method used for forcing WAL updates out to disk.
 work_mem                        | 1024                | Sets the maximum memory to be used for query workspaces.
 zero_damaged_pages              | off                | Continues processing past damaged page headers.
(160 registros)
BDDNF=#



BDDNF=# show shared_buffers;
 shared_buffers
----------------
 16384
(1 registro)

BDDNF=# show effective_cache_size;
 effective_cache_size
----------------------
 65536
(1 registro)

BDDNF=#
BDDNF=# analyze;

BDDNF=# explain  analyze select * from DECLARACAO DEC  inner join CADASTRO CAD on (CAD.ID_DECLARACAO=DEC.ID_DECLARACAO)     inner join NOTA_FISCAL NF on (NF.ID_CADASTRO=CAD.ID_CADASTRO) inner join ITEM_NOTA INF on (INF.ID_NF=NF.ID_NF) where DEC.ID_ARQUIVO=1;
                                                                                      QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Hash Join  (cost=120444.24..375598.96 rows=1131785 width=770) (actual time=92549.724..263311.088 rows=1151043 loops=1)
   Hash Cond: ("outer".id_nf = "inner".id_nf)
   ->  Seq Scan on item_nota inf  (cost=0.00..65025.49 rows=2362749 width=159) (actual time=0.098..67543.142 rows=2359722 loops=1)
   ->  Hash  (cost=63045.74..63045.74 rows=703398 width=611) (actual time=72520.590..72520.590 rows=719746 loops=1)
         ->  Merge Join  (cost=3654.38..63045.74 rows=703398 width=611) (actual time=309.410..51863.765 rows=719746 loops=1)
               Merge Cond: ("outer".id_cadastro = "inner".id_cadastro)
               ->  Index Scan using idx_nf_id_cadastro on nota_fiscal nf  (cost=0.00..45169.79 rows=1468435 width=205) (actual time=11.272..45105.359 rows=719747 loops=1)
               ->  Sort  (cost=3654.38..3672.89 rows=7406 width=406) (actual time=298.112..2113.226 rows=722613 loops=1)
                     Sort Key: cad.id_cadastro
                     ->  Hash Join  (cost=189.77..2382.35 rows=7406 width=406) (actual time=32.802..108.488 rows=7467 loops=1)
                           Hash Cond: ("outer".id_declaracao = "inner".id_declaracao)
                           ->  Seq Scan on cadastro cad  (cost=0.00..1886.61 rows=15461 width=295) (actual time=3.735..30.493 rows=15461 loops=1)
                           ->  Hash  (cost=178.09..178.09 rows=4673 width=111) (actual time=28.995..28.995 rows=4667 loops=1)
                                 ->  Index Scan using idx_dec_id_arquivo_1 on declaracao "dec"  (cost=0.00..178.09 rows=4673 width=111) (actual time=0.172..21.565 rows=4667 loops=1)
                                       Index Cond: (id_arquivo = 1)
 Total runtime: 264237.276 ms
(16 registros)

BDDNF=#

BDDNF=# show work_mem;
 work_mem
----------
 16384
(1 registro)

BDDNF=#
BDDNF=# vacuum analyze;
BDDNF=# explain  analyze select * from DECLARACAO DEC  inner join CADASTRO CAD on (CAD.ID_DECLARACAO=DEC.ID_DECLARACAO)     inner join NOTA_FISCAL NF on (NF.ID_CADASTRO=CAD.ID_CADASTRO) inner join ITEM_NOTA INF on (INF.ID_NF=NF.ID_NF) where DEC.ID_ARQUIVO=1;
                                                                               QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Hash Join  (cost=2408.88..213541.74 rows=1168033 width=770) (actual time=117.621..73325.377 rows=1151043 loops=1)
   Hash Cond: ("outer".id_cadastro = "inner".id_cadastro)
   ->  Merge Join  (cost=0.00..152258.09 rows=2359722 width=365) (actual time=0.035..67152.108 rows=2359722 loops=1)
         Merge Cond: ("outer".id_nf = "inner".id_nf)
         ->  Index Scan using idx_nf_id_nf on nota_fiscal nf  (cost=0.00..45249.77 rows=1475504 width=206) (actual time=0.017..28768.586 rows=1475504 loops=1)
         ->  Index Scan using idx_inf_id_nf on item_nota inf  (cost=0.00..73827.94 rows=2359722 width=159) (actual time=0.007..29257.604 rows=2359722 loops=1)
   ->  Hash  (cost=2389.75..2389.75 rows=7653 width=405) (actual time=117.552..117.552 rows=7467 loops=1)
         ->  Hash Join  (cost=194.70..2389.75 rows=7653 width=405) (actual time=12.943..77.071 rows=7467 loops=1)
               Hash Cond: ("outer".id_declaracao = "inner".id_declaracao)
               ->  Seq Scan on cadastro cad  (cost=0.00..1886.61 rows=15461 width=294) (actual time=0.612..21.838 rows=15461 loops=1)
               ->  Hash  (cost=182.62..182.62 rows=4829 width=111) (actual time=12.291..12.291 rows=4667 loops=1)
                     ->  Index Scan using idx_dec_id_arquivo_1 on declaracao "dec"  (cost=0.00..182.62 rows=4829 width=111) (actual time=0.012..6.698 rows=4667 loops=1)
                           Index Cond: (id_arquivo = 1)
 Total runtime: 74139.577 ms
(14 registros)

BDDNF=#
BDDNF=# show work_mem;
 work_mem
----------
 65535
(1 registro)

BDDNF=# vacuum analyze;

BDDNF=# explain  analyze select * from DECLARACAO DEC  inner join CADASTRO CAD on (CAD.ID_DECLARACAO=DEC.ID_DECLARACAO)     inner join NOTA_FISCAL NF on (NF.ID_CADASTRO=CAD.ID_CADASTRO) inner join ITEM_NOTA INF on (INF.ID_NF=NF.ID_NF) where DEC.ID_ARQUIVO=1;
                                                                               QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Hash Join  (cost=2401.16..213151.83 rows=1132624 width=770) (actual time=1353.630..90731.034 rows=1151043 loops=1)
   Hash Cond: ("outer".id_cadastro = "inner".id_cadastro)
   ->  Merge Join  (cost=0.00..152229.99 rows=2359722 width=365) (actual time=50.522..83219.164 rows=2359722 loops=1)
         Merge Cond: ("outer".id_nf = "inner".id_nf)
         ->  Index Scan using idx_nf_id_nf on nota_fiscal nf  (cost=0.00..45250.49 rows=1475504 width=206) (actual time=36.288..42119.058 rows=1475504 loops=1)
         ->  Index Scan using idx_inf_id_nf on item_nota inf  (cost=0.00..73827.94 rows=2359722 width=159) (actual time=14.207..31996.232 rows=2359722 loops=1)
   ->  Hash  (cost=2382.61..2382.61 rows=7421 width=405) (actual time=1303.038..1303.038 rows=7467 loops=1)
         ->  Hash Join  (cost=189.87..2382.61 rows=7421 width=405) (actual time=407.868..1260.698 rows=7467 loops=1)
               Hash Cond: ("outer".id_declaracao = "inner".id_declaracao)
               ->  Seq Scan on cadastro cad  (cost=0.00..1886.61 rows=15461 width=294) (actual time=391.844..1203.456 rows=15461 loops=1)
               ->  Hash  (cost=178.16..178.16 rows=4683 width=111) (actual time=15.933..15.933 rows=4667 loops=1)
                     ->  Index Scan using idx_dec_id_arquivo_1 on declaracao "dec"  (cost=0.00..178.16 rows=4683 width=111) (actual time=0.934..9.335 rows=4667 loops=1)
                           Index Cond: (id_arquivo = 1)
 Total runtime: 91555.164 ms
(14 registros)

BDDNF=#
BDDNF=# show effective_cache_size;
 effective_cache_size
----------------------
 8192
(1 registro)

BDDNF=#
BDDNF=# vacuum analyze;
BDDNF=# explain  analyze select * from DECLARACAO DEC  inner join CADASTRO CAD on (CAD.ID_DECLARACAO=DEC.ID_DECLARACAO)     inner join NOTA_FISCAL NF on (NF.ID_CADASTRO=CAD.ID_CADASTRO) inner join ITEM_NOTA INF on (INF.ID_NF=NF.ID_NF) where DEC.ID_ARQUIVO=1;
                                                                                QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Hash Join  (cost=2248.30..195509.91 rows=1138271 width=772) (actual time=1366.555..82101.290 rows=1151043 loops=1)
   Hash Cond: ("outer".id_cadastro = "inner".id_cadastro)
   ->  Merge Join  (cost=0.00..152382.37 rows=2359722 width=366) (actual time=26.857..74554.864 rows=2359722 loops=1)
         Merge Cond: ("outer".id_nf = "inner".id_nf)
         ->  Index Scan using idx_nf_id_nf on nota_fiscal nf  (cost=0.00..45438.10 rows=1475504 width=207) (actual time=14.174..35966.564 rows=1475504 loops=1)
         ->  Index Scan using idx_inf_id_nf on item_nota inf  (cost=0.00..73827.94 rows=2359722 width=159) (actual time=12.658..29408.705 rows=2359722 loops=1)
   ->  Hash  (cost=2229.65..2229.65 rows=7458 width=406) (actual time=1339.629..1339.629 rows=7467 loops=1)
         ->  Hash Join  (cost=191.16..2229.65 rows=7458 width=406) (actual time=432.780..1296.921 rows=7467 loops=1)
               Hash Cond: ("outer".id_declaracao = "inner".id_declaracao)
               ->  Seq Scan on cadastro cad  (cost=0.00..1886.61 rows=15461 width=294) (actual time=394.815..1218.092 rows=15461 loops=1)
               ->  Hash  (cost=179.39..179.39 rows=4706 width=112) (actual time=37.875..37.875 rows=4667 loops=1)
                     ->  Index Scan using idx_dec_id_arquivo_1 on declaracao "dec"  (cost=0.00..179.39 rows=4706 width=112) (actual time=22.426..31.246 rows=4667 loops=1)
                           Index Cond: (id_arquivo = 1)
 Total runtime: 82923.212 ms
(14 registros)
