Re: Slow query when the select list is big - Mailing list pgsql-general
From | Sterpu Victor |
---|---|
Subject | Re: Slow query when the select list is big |
Date | |
Msg-id | em82a49b1a-eca8-46f7-be85-0f1f065cb0ea@victor-pc Whole thread Raw |
In response to | Re: Slow query when the select list is big ("Sterpu Victor" <victor@caido.ro>) |
List | pgsql-general |
Acctualy the optimization should be cauzed by the filters on the joins that have been moved at the begining of the query. So now postres is making a filter before joining a lot of data. The fact that these join produce multiple rows is not relevant. At least this is what I think is heapening. ------ Original Message ------ From: "Sterpu Victor" <victor@caido.ro> To: "Sterpu Victor" <victor@caido.ro>; "David Rowley" <david.rowley@2ndquadrant.com> Cc: "Rob Imig" <rimig88@gmail.com>; "PostgreSQL General" <pgsql-general@postgresql.org>; "David G. Johnston" <david.g.johnston@gmail.com> Sent: 9/5/2016 11:01:56 AM Subject: Re[2]: [GENERAL] Slow query when the select list is big >I went to 2.4 seconds by joining first the tables that produce many >rows. > >SELECT >row_number() OVER (ORDER BY J1031101.validfrom DESC) AS nrcrt , >J1033386.name AS sectie_internare , >J1033387.name AS sectie_externare , >TO_CHAR(J1031101.validfrom , 'YYYY-MM-DD HH24:MI') AS validfrom , >TO_CHAR(J1033359.validto , 'YYYY-MM-DD HH24:MI') AS validto , >CASE WHEN(CHAR_LENGTH(J1031074.signature) > 10) THEN(1) ELSE(0) END AS >semnat_internare , >CASE WHEN(CHAR_LENGTH(J1031074.signature_externare) > 10) THEN(1) >ELSE(0) END AS semnat_externare , >J1031076.name AS sex , >J1031074.id AS id , >J1031074.siui_appid AS siui_appid , >J1031074.data_adeverinta AS data_adeverinta , >J1031074.is_paliativ AS text_paliativ , >J1031074.cardno AS cardno , >J1031074.cardno_externare AS cardno_externare , >J1031074.sign_date AS sign_date , >J1031074.sign_date_externare AS sign_date_externare , >J1031074.unsigned_string AS unsigned_string , >J1031074.unsigned_string_externare AS unsigned_string_externare , >J1031074.signhash AS signhash , >J1031074.signhash_externare AS signhash_externare , >J1031074.signature AS signature , >J1031074.signature_externare AS signature_externare , >J1031074.send_xml AS send_xml , >J1031074.send_xml_externare AS send_xml_externare , >J1031074.received_xml AS received_xml , >J1031074.received_xml_externare AS received_xml_externare , >J1031074.error AS error , >J1031074.error_externare AS error_externare , >J1031074.validat AS validat , >J1031074.validat_externare AS validat_externare , >J1031074.online AS online , >J1031074.online_externare AS online_externare , >J1031074.serie_bilet_internare AS text_serie_bilet_internare , >J1031074.nr_bilet_internare AS text_numar_bilet_internare , >J1031074.idpatient AS _popup_cnp_pacient , >J1031075.cnp AS popup_cnp_pacient , >J1031075.name AS text_nume_pacient , >J1031075.surname AS text_prenume_pacient , >J1031074.nrfo AS text_numar_fosz , >J1031074.greutate_nastere AS text_greutate_nastere , >J1031078.value AS popup_tip_asigurare , >J1031074.idensuredstatustype AS _popup_tip_asigurare , >J1031079.value AS popup_statut_asigurat , >J1031074.idensuredstatus AS _popup_statut_asigurat , >J1031080.code AS popup_cas_asigurat , >J1031074.id_org_unit AS _popup_cas_asigurat , >J1031081.code AS popup_categorie_asigurare , >J1031074.id_categorie_asigurat AS _popup_categorie_asigurare , >J1031082.name AS popup_tip_internare , >J1031074.id_focg_tip_internare AS _popup_tip_internare , >J1031083.name AS popup_criteriu_internare , >J1031074.id_focg_criteriu_internare AS _popup_criteriu_internare , >J1031084.stencil_no AS popup_medic_curant , >J1031084.id AS _popup_medic_curant , >J1031089.value AS popup_nivel_instruire , >J1031074.id_education_level AS _popup_nivel_instruire , >J1031074.greutate AS text_greutate_internare , >J1031090.nume AS popup_situatii_speciale , >J1031074.id_focg_situatii_speciale AS _popup_situatii_speciale , >J1031091.nume AS popup_internat_prin , >J1031091.id AS _popup_internat_prin , >J1031092.nume AS popup_formulare_europene , >J1031074.id_formulare_europene AS _popup_formulare_europene , >J1031074.id_cnp_mama AS _popup_cnp_mama , >J1031094.cnp AS popup_cnp_mama , >J1031093.nrfo AS popup_fo_mama , >J1031074.id_focg AS _popup_fo_mama , >J1031074.nr_card_euro AS text_nr_card_european , >J1031074.nr_pasaport AS text_nr_pasaport , >J1031074.nr_card_national AS text_nr_card_national , >J1031088.id AS _popup_ocupatia , >J1031088.name AS popup_ocupatia , >J1031074.export_drg AS export_drg , >J1031074.drgcaseid AS drgcaseid , >J1031074.export_ecosoft AS export_ecosoft , >J1031074.mesaj_drg AS mesaj_drg , >J1031074.uid AS uid , >J1031074.mesaj_ecosoft AS mesaj_ecosoft , >J1031074.id_address_domiciliu AS text_id_address_domiciliu , >J1031074.id_address_domiciliu AS _text_id_address_domiciliu , >J1031074.id_address_resedinta AS _text_id_address_resedinta , >J1031074.id_address_resedinta AS text_id_address_resedinta , >'0' AS marcator , >J1031095.id AS _popup_sursa_internare , >J1031095.denumire AS popup_sursa_internare , >J1031096.id AS _popup_diseasecategory , >J1031096.code AS popup_diseasecategory , >J1031097.id AS _popup_diagnostic_internare_icd10 , >J1031097.name AS popup_diagnostic_internare_icd10 , >J1031098.id AS _popup_mod_contract , >J1031098.description AS popup_mod_contract , >J1031099.id AS _popup_criteriu_urgenta , >J1031099.name AS popup_criteriu_urgenta , >J1031100.id AS _popup_exceptie_bi , >J1031100.code AS popup_exceptie_bi , >J1031074.scrisoare_medicala_parafa AS text_parafa_scrisoare_medicala , >J1031074.scrisoare_medicala_contract AS >text_contract_scrisoare_medicala , >J1031074.scrisoare_medicala_tip_contract AS >text_tip_contract_scrisoare_medicala , >J1031074.export_siui AS export_siui , >J1031074.mesaj_siui AS mesaj_siui , >J1031087.id AS _popup_intocmit , >J1031087.stencil_no AS popup_intocmit , >J1031074.diagnostic_trimitere_text AS text_diagnostic_trimitere , >J1031074.greutate_externare AS text_greutate_externare , >J1031074.data_decesului AS text_data_deces , >J1031736.id AS _popup_tip_externare , >J1031736.descriere AS popup_tip_externare , >J1031737.id AS _popup_stare_externare , >J1031737.descriere AS popup_stare_externare , >J1033295.id AS _popup_chirurg , >J1033295.stencil_no AS popup_chirurg , >J1033299.id AS _text_caz_externare , >J1033299.description AS text_caz_externare , >J1031074.text_ore_ventilatie AS text_ore_ventilatie , >J1031074.drg_cod_grupa AS text_drg_cod_grupa , >J1031074.drg_relative_value AS text_drg_relative_value , >J1031074.data_2500g AS text_data_2500g , >J1031074.prematur_gr_i AS text_prematur_gr_i , >J1033304.id AS _popup_cetatenie , >J1033304.description AS popup_cetatenie , >J1033358.id AS _popup_tip_cetatenie , >J1033358.name AS popup_tip_cetatenie , >J1031074.reinternat_transfer AS text_reinternat_transfer , >J1031074.aviz_comisie AS text_aviz_comisie_reinternare , >J1031074.criteriu_urgenta1 AS criteriu_urgenta1 , >J1031074.criteriu_urgenta2 AS criteriu_urgenta2 , >J1031074.criteriu_urgenta3 AS criteriu_urgenta3 , >J1031074.criteriu_urgenta4 AS criteriu_urgenta4 , >J1031074.criteriu_urgenta5 AS criteriu_urgenta5 , >J1031074.criteriu_urgenta6 AS criteriu_urgenta6 , >J1031074.criteriu_urgenta7 AS criteriu_urgenta7 , >J1031074.criteriu_urgenta8 AS criteriu_urgenta8 , >J1031074.criteriu_urgenta9a AS criteriu_urgenta9a , >J1031074.criteriu_urgenta9b AS criteriu_urgenta9b , >J1031074.criteriu_urgenta10 AS criteriu_urgenta10 , >J1031074.criteriu_urgenta11 AS criteriu_urgenta11 , >J1031074.criteriu_urgenta12 AS criteriu_urgenta12 , >J1031074.criteriu_urgenta13 AS criteriu_urgenta13 , >J1031074.infectie_nosocomiala AS infectie_nosocomiala , >J1031074.cu_programare AS cu_programare , >J1031074.stare_critica_internare AS stare_critica_internare , >J1033704.id AS _id_stari_spitalizari , >J1033704.nume AS id_stari_spitalizari > FROM focg AS J1031074 > LEFT JOIN focgdepartment AS J1031101 ON ( J1031101.idfocg = >J1031074.id) > LEFT JOIN department AS J1033386 ON ( J1033386.id = >J1031101.iddepartment) > LEFT JOIN focgdepartment AS J1031102 ON ( J1031102.idfocg = >J1031074.id AND J1031102.validfrom < J1031101.validfrom) > LEFT JOIN focgdepartment AS J1033359 ON ( J1033359.idfocg = >J1031074.id) > LEFT JOIN department AS J1033387 ON ( J1033387.id = >J1033359.iddepartment) > LEFT JOIN focgdepartment AS J1033360 ON ( J1033360.idfocg = >J1031074.id AND J1033360.validfrom > J1033359.validfrom) > JOIN focgdepartment AS J1033407 ON ( J1033407.idfocg = J1031074.id >AND J1033407.iddepartment IN (/*Executing QueryID 476590*/SELECT >DISTINCT(J1034477.id) AS ret FROM department AS J1034477 JOIN >personnel_department AS J1034478 ON ( J1034478.id_department = >J1034477.id) JOIN personnel AS J1034479 ON ( J1034479.id = >J1034478.id_personnel AND J1034479.id_connected_user = '1'))) > > LEFT JOIN person AS J1031075 ON ( J1031075.id = J1031074.idpatient) > LEFT JOIN sex AS J1031076 ON ( J1031076.id = J1031075.idsex) > LEFT JOIN focg_serials AS J1031077 ON ( J1031077.id = >J1031074.id_focg_serials) > LEFT JOIN ensuredstatustype AS J1031078 ON ( J1031078.id = >J1031074.idensuredstatustype) > LEFT JOIN ensuredstatus AS J1031079 ON ( J1031079.id = >J1031074.idensuredstatus) > LEFT JOIN org_units AS J1031080 ON ( J1031080.id = >J1031074.id_org_unit) > LEFT JOIN personstate AS J1031081 ON ( J1031081.id = >J1031074.id_categorie_asigurat) > LEFT JOIN focginterntype AS J1031082 ON ( J1031082.id = >J1031074.id_focg_tip_internare) > LEFT JOIN focginterncrit AS J1031083 ON ( J1031083.id = >J1031074.id_focg_criteriu_internare) > LEFT JOIN physicians AS J1031084 ON ( J1031084.id = >J1031074.idphysiciancurrent) > LEFT JOIN personnel AS J1031085 ON ( J1031085.id = >J1031084.id_personnel) > LEFT JOIN person AS J1031086 ON ( J1031086.id = J1031085.idperson) > LEFT JOIN physicians AS J1031087 ON ( J1031087.id = >J1031074.idphysician_madeby) > LEFT JOIN proffession AS J1031088 ON ( J1031088.id = >J1031074.idproffesion) > LEFT JOIN educationlevel AS J1031089 ON ( J1031089.id = >J1031074.id_education_level) > LEFT JOIN focg_situatii_speciale AS J1031090 ON ( J1031090.id = >J1031074.id_focg_situatii_speciale) > LEFT JOIN focg_internat_prin AS J1031091 ON ( J1031091.id = >J1031074.id_focg_internat_prin) > LEFT JOIN formulare_europene AS J1031092 ON ( J1031092.id = >J1031074.id_formulare_europene) > LEFT JOIN focg AS J1031093 ON ( J1031093.id = J1031074.id_focg) > LEFT JOIN person AS J1031094 ON ( J1031094.id = >J1031074.id_cnp_mama) > LEFT JOIN focg_sursa_internare AS J1031095 ON ( J1031095.id = >J1031074.id_focg_sursa_internare) > LEFT JOIN diseasecategory AS J1031096 ON ( J1031096.id = >J1031074.id_diseasecategory) > LEFT JOIN icd10 AS J1031097 ON ( J1031097.id = J1031074.id_icd10) > LEFT JOIN focg_contract_modes AS J1031098 ON ( J1031098.id = >J1031074.id_focg_contract_modes) > LEFT JOIN focg_criterii_urgenta AS J1031099 ON ( J1031099.id = >J1031074.id_focg_criterii_urgenta) > LEFT JOIN exceptie_bilet_internare AS J1031100 ON ( J1031100.id = >J1031074.id_exceptie_bilet_internare) > LEFT JOIN focg_tip_externare AS J1031736 ON ( J1031736.id = >J1031074.id_focg_tip_externare) > LEFT JOIN focg_stare_externare AS J1031737 ON ( J1031737.id = >J1031074.id_focg_stare_externare) > LEFT JOIN physicians AS J1033295 ON ( J1033295.id = >J1031074.idphysician_surgeon) > LEFT JOIN hospital_release_statuses AS J1033299 ON ( J1033299.id = >J1031074.id_hospital_release_statuses) > LEFT JOIN citizenship AS J1033304 ON ( J1033304.id = >J1031074.id_citizenship) > LEFT JOIN drg_tip_cetatenie AS J1033358 ON ( J1033358.id = >J1031074.id_drg_tip_cetatenie) > LEFT JOIN stari_spitalizari AS J1033704 ON ( J1033704.id = >J1031074.id_stari_spitalizari) > > WHERE J1031102.id IS NULL AND J1033360.id IS NULL AND ( ( >DATE(J1031101.validfrom)>= DATE('2016-05-01') AND >DATE(J1031101.validfrom)<= DATE('2016-05-31 00:00:00.0') ) OR ( >J1033359.validto IS NOT NULL AND DATE(J1033359.validto)>= >DATE('2016-05-01') AND DATE(J1033359.validto)<= DATE('2016-05-31 >00:00:00.0') ) OR ( J1033359.validto IS NULL AND >DATE(J1031101.validfrom)<= DATE('2016-05-01') ) ) > > ORDER BY J1031101.validfrom DESC > LIMIT 20 OFFSET 0 > > >------ Original Message ------ >From: "Sterpu Victor" <victor@caido.ro> >To: "David Rowley" <david.rowley@2ndquadrant.com> >Cc: "Rob Imig" <rimig88@gmail.com>; "PostgreSQL General" ><pgsql-general@postgresql.org>; "David G. Johnston" ><david.g.johnston@gmail.com> >Sent: 9/5/2016 10:44:45 AM >Subject: Re: [GENERAL] Slow query when the select list is big > >>I solved the problem patialy by swithing the order of a join. >>I tested on a slower server to see better the difference. >>After moving a single join the query runs in 4.1 seconds insted 6.4 >>seconds. >>I pasted the optimized query down. When I move the join J1033704 at >>the end(last join) the time is increased to 6.4 seconds. >> >>SELECT >>row_number() OVER (ORDER BY J1031101.validfrom DESC) AS nrcrt , >>CASE WHEN(CHAR_LENGTH(J1031074.signature) > 10) THEN(1) ELSE(0) END AS >>semnat_internare , >>CASE WHEN(CHAR_LENGTH(J1031074.signature_externare) > 10) THEN(1) >>ELSE(0) END AS semnat_externare , >>J1031076.name AS sex , >>J1031074.id AS id , >>J1031074.siui_appid AS siui_appid , >>J1031074.data_adeverinta AS data_adeverinta , >>J1031074.is_paliativ AS text_paliativ , >>J1031074.cardno AS cardno , >>J1031074.cardno_externare AS cardno_externare , >>J1031074.sign_date AS sign_date , >>J1031074.sign_date_externare AS sign_date_externare , >>J1031074.unsigned_string AS unsigned_string , >>J1031074.unsigned_string_externare AS unsigned_string_externare , >>J1031074.signhash AS signhash , >>J1031074.signhash_externare AS signhash_externare , >>J1031074.signature AS signature , >>J1031074.signature_externare AS signature_externare , >>J1031074.send_xml AS send_xml , >>J1031074.send_xml_externare AS send_xml_externare , >>J1031074.received_xml AS received_xml , >>J1031074.received_xml_externare AS received_xml_externare , >>J1031074.error AS error , >>J1031074.error_externare AS error_externare , >>J1031074.validat AS validat , >>J1031074.validat_externare AS validat_externare , >>J1031074.online AS online , >>J1031074.online_externare AS online_externare , >>J1031074.serie_bilet_internare AS text_serie_bilet_internare , >>J1031074.nr_bilet_internare AS text_numar_bilet_internare , >>J1031074.idpatient AS _popup_cnp_pacient , >>J1031075.cnp AS popup_cnp_pacient , >>J1031075.name AS text_nume_pacient , >>J1031075.surname AS text_prenume_pacient , >>J1031074.nrfo AS text_numar_fosz , >>J1031074.greutate_nastere AS text_greutate_nastere , >>J1031078.value AS popup_tip_asigurare , >>J1031074.idensuredstatustype AS _popup_tip_asigurare , >>J1031079.value AS popup_statut_asigurat , >>J1031074.idensuredstatus AS _popup_statut_asigurat , >>J1031080.code AS popup_cas_asigurat , >>J1031074.id_org_unit AS _popup_cas_asigurat , >>J1031081.code AS popup_categorie_asigurare , >>J1031074.id_categorie_asigurat AS _popup_categorie_asigurare , >>J1031082.name AS popup_tip_internare , >>J1031074.id_focg_tip_internare AS _popup_tip_internare , >>J1031083.name AS popup_criteriu_internare , >>J1031074.id_focg_criteriu_internare AS _popup_criteriu_internare , >>J1031084.stencil_no AS popup_medic_curant , >>J1031084.id AS _popup_medic_curant , >>J1031089.value AS popup_nivel_instruire , >>J1031074.id_education_level AS _popup_nivel_instruire , >>J1031074.greutate AS text_greutate_internare , >>J1031090.nume AS popup_situatii_speciale , >>J1031074.id_focg_situatii_speciale AS _popup_situatii_speciale , >>J1031091.nume AS popup_internat_prin , >>J1031091.id AS _popup_internat_prin , >>J1031092.nume AS popup_formulare_europene , >>J1031074.id_formulare_europene AS _popup_formulare_europene , >>J1031074.id_cnp_mama AS _popup_cnp_mama , >>J1031094.cnp AS popup_cnp_mama , >>J1031093.nrfo AS popup_fo_mama , >>J1031074.id_focg AS _popup_fo_mama , >>J1031074.nr_card_euro AS text_nr_card_european , >>J1031074.nr_pasaport AS text_nr_pasaport , >>J1031074.nr_card_national AS text_nr_card_national , >>J1031088.id AS _popup_ocupatia , >>J1031088.name AS popup_ocupatia , >>J1031074.export_drg AS export_drg , >>J1031074.drgcaseid AS drgcaseid , >>J1031074.export_ecosoft AS export_ecosoft , >>J1031074.mesaj_drg AS mesaj_drg , >>J1031074.uid AS uid , >>J1031074.mesaj_ecosoft AS mesaj_ecosoft , >>J1031074.id_address_domiciliu AS text_id_address_domiciliu , >>J1031074.id_address_domiciliu AS _text_id_address_domiciliu , >>J1031074.id_address_resedinta AS _text_id_address_resedinta , >>J1031074.id_address_resedinta AS text_id_address_resedinta , >>'0' AS marcator , >>J1031095.id AS _popup_sursa_internare , >>J1031095.denumire AS popup_sursa_internare , >>J1031096.id AS _popup_diseasecategory , >>J1031096.code AS popup_diseasecategory , >>J1031097.id AS _popup_diagnostic_internare_icd10 , >>J1031097.name AS popup_diagnostic_internare_icd10 , >>J1031098.id AS _popup_mod_contract , >>J1031098.description AS popup_mod_contract , >>J1031099.id AS _popup_criteriu_urgenta , >>J1031099.name AS popup_criteriu_urgenta , >>J1031100.id AS _popup_exceptie_bi , >>J1031100.code AS popup_exceptie_bi , >>J1031074.scrisoare_medicala_parafa AS text_parafa_scrisoare_medicala , >>J1031074.scrisoare_medicala_contract AS >>text_contract_scrisoare_medicala , >>J1031074.scrisoare_medicala_tip_contract AS >>text_tip_contract_scrisoare_medicala , >>J1031074.export_siui AS export_siui , >>J1031074.mesaj_siui AS mesaj_siui , >>J1031087.id AS _popup_intocmit , >>J1031087.stencil_no AS popup_intocmit , >>J1031074.diagnostic_trimitere_text AS text_diagnostic_trimitere , >>J1031074.greutate_externare AS text_greutate_externare , >>J1031074.data_decesului AS text_data_deces , >>J1031736.id AS _popup_tip_externare , >>J1031736.descriere AS popup_tip_externare , >>J1031737.id AS _popup_stare_externare , >>J1031737.descriere AS popup_stare_externare , >>J1033295.id AS _popup_chirurg , >>J1033295.stencil_no AS popup_chirurg , >>J1033299.id AS _text_caz_externare , >>J1033299.description AS text_caz_externare , >>J1031074.text_ore_ventilatie AS text_ore_ventilatie , >>J1031074.drg_cod_grupa AS text_drg_cod_grupa , >>J1031074.drg_relative_value AS text_drg_relative_value , >>J1031074.data_2500g AS text_data_2500g , >>J1031074.prematur_gr_i AS text_prematur_gr_i , >>J1033304.id AS _popup_cetatenie , >>J1033304.description AS popup_cetatenie , >>J1033358.id AS _popup_tip_cetatenie , >>J1033358.name AS popup_tip_cetatenie , >>J1031074.reinternat_transfer AS text_reinternat_transfer , >>J1031074.aviz_comisie AS text_aviz_comisie_reinternare , >>J1031074.criteriu_urgenta1 AS criteriu_urgenta1 , >>J1031074.criteriu_urgenta2 AS criteriu_urgenta2 , >>J1031074.criteriu_urgenta3 AS criteriu_urgenta3 , >>J1031074.criteriu_urgenta4 AS criteriu_urgenta4 , >>J1031074.criteriu_urgenta5 AS criteriu_urgenta5 , >>J1031074.criteriu_urgenta6 AS criteriu_urgenta6 , >>J1031074.criteriu_urgenta7 AS criteriu_urgenta7 , >>J1031074.criteriu_urgenta8 AS criteriu_urgenta8 , >>J1031074.criteriu_urgenta9a AS criteriu_urgenta9a , >>J1031074.criteriu_urgenta9b AS criteriu_urgenta9b , >>J1031074.criteriu_urgenta10 AS criteriu_urgenta10 , >>J1031074.criteriu_urgenta11 AS criteriu_urgenta11 , >>J1031074.criteriu_urgenta12 AS criteriu_urgenta12 , >>J1031074.criteriu_urgenta13 AS criteriu_urgenta13 , >>J1031074.infectie_nosocomiala AS infectie_nosocomiala , >>J1031074.cu_programare AS cu_programare , >>J1031074.stare_critica_internare AS stare_critica_internare , >>J1033704.id AS _id_stari_spitalizari , >>J1033704.nume AS id_stari_spitalizari >> FROM focg AS J1031074 >> LEFT JOIN person AS J1031075 ON ( J1031075.id = J1031074.idpatient) >> LEFT JOIN sex AS J1031076 ON ( J1031076.id = J1031075.idsex) >> LEFT JOIN focg_serials AS J1031077 ON ( J1031077.id = >>J1031074.id_focg_serials) >> LEFT JOIN ensuredstatustype AS J1031078 ON ( J1031078.id = >>J1031074.idensuredstatustype) >> LEFT JOIN ensuredstatus AS J1031079 ON ( J1031079.id = >>J1031074.idensuredstatus) >> LEFT JOIN org_units AS J1031080 ON ( J1031080.id = >>J1031074.id_org_unit) >> LEFT JOIN personstate AS J1031081 ON ( J1031081.id = >>J1031074.id_categorie_asigurat) >> LEFT JOIN focginterntype AS J1031082 ON ( J1031082.id = >>J1031074.id_focg_tip_internare) >> LEFT JOIN focginterncrit AS J1031083 ON ( J1031083.id = >>J1031074.id_focg_criteriu_internare) >> LEFT JOIN physicians AS J1031084 ON ( J1031084.id = >>J1031074.idphysiciancurrent) >> LEFT JOIN personnel AS J1031085 ON ( J1031085.id = >>J1031084.id_personnel) >> LEFT JOIN person AS J1031086 ON ( J1031086.id = J1031085.idperson) >> LEFT JOIN physicians AS J1031087 ON ( J1031087.id = >>J1031074.idphysician_madeby) >> LEFT JOIN proffession AS J1031088 ON ( J1031088.id = >>J1031074.idproffesion) >> LEFT JOIN educationlevel AS J1031089 ON ( J1031089.id = >>J1031074.id_education_level) >> LEFT JOIN focg_situatii_speciale AS J1031090 ON ( J1031090.id = >>J1031074.id_focg_situatii_speciale) >> LEFT JOIN focg_internat_prin AS J1031091 ON ( J1031091.id = >>J1031074.id_focg_internat_prin) >> LEFT JOIN formulare_europene AS J1031092 ON ( J1031092.id = >>J1031074.id_formulare_europene) >> LEFT JOIN focg AS J1031093 ON ( J1031093.id = J1031074.id_focg) >> LEFT JOIN person AS J1031094 ON ( J1031094.id = >>J1031074.id_cnp_mama) >> LEFT JOIN focg_sursa_internare AS J1031095 ON ( J1031095.id = >>J1031074.id_focg_sursa_internare) >> LEFT JOIN diseasecategory AS J1031096 ON ( J1031096.id = >>J1031074.id_diseasecategory) >> LEFT JOIN icd10 AS J1031097 ON ( J1031097.id = J1031074.id_icd10) >> LEFT JOIN focg_contract_modes AS J1031098 ON ( J1031098.id = >>J1031074.id_focg_contract_modes) >> LEFT JOIN focg_criterii_urgenta AS J1031099 ON ( J1031099.id = >>J1031074.id_focg_criterii_urgenta) >> LEFT JOIN exceptie_bilet_internare AS J1031100 ON ( J1031100.id = >>J1031074.id_exceptie_bilet_internare) >> LEFT JOIN focg_tip_externare AS J1031736 ON ( J1031736.id = >>J1031074.id_focg_tip_externare) >> LEFT JOIN focg_stare_externare AS J1031737 ON ( J1031737.id = >>J1031074.id_focg_stare_externare) >> LEFT JOIN physicians AS J1033295 ON ( J1033295.id = >>J1031074.idphysician_surgeon) >> LEFT JOIN hospital_release_statuses AS J1033299 ON ( J1033299.id = >>J1031074.id_hospital_release_statuses) >> LEFT JOIN citizenship AS J1033304 ON ( J1033304.id = >>J1031074.id_citizenship) >> LEFT JOIN drg_tip_cetatenie AS J1033358 ON ( J1033358.id = >>J1031074.id_drg_tip_cetatenie) >> LEFT JOIN stari_spitalizari AS J1033704 ON ( J1033704.id = >>J1031074.id_stari_spitalizari) >> LEFT JOIN focgdepartment AS J1031101 ON ( J1031101.idfocg = >>J1031074.id) >> LEFT JOIN department AS J1033386 ON ( J1033386.id = >>J1031101.iddepartment) >> LEFT JOIN focgdepartment AS J1031102 ON ( J1031102.idfocg = >>J1031074.id AND J1031102.validfrom < J1031101.validfrom) >> LEFT JOIN focgdepartment AS J1033359 ON ( J1033359.idfocg = >>J1031074.id) >> LEFT JOIN department AS J1033387 ON ( J1033387.id = >>J1033359.iddepartment) >> LEFT JOIN focgdepartment AS J1033360 ON ( J1033360.idfocg = >>J1031074.id AND J1033360.validfrom > J1033359.validfrom) >> JOIN focgdepartment AS J1033407 ON ( J1033407.idfocg = J1031074.id >>AND J1033407.iddepartment IN (/*Executing QueryID 476590*/SELECT >>DISTINCT(J1034477.id) AS ret FROM department AS J1034477 JOIN >>personnel_department AS J1034478 ON ( J1034478.id_department = >>J1034477.id) >> JOIN personnel AS J1034479 ON ( J1034479.id = J1034478.id_personnel >>AND J1034479.id_connected_user = '1'))) >> >> WHERE J1031102.id IS NULL AND J1033360.id IS NULL AND ( ( >>DATE(J1031101.validfrom)>= DATE('2016-05-01') AND >>DATE(J1031101.validfrom)<= DATE('2016-05-31 00:00:00.0') ) OR ( >>J1033359.validto IS NOT NULL AND DATE(J1033359.validto)>= >>DATE('2016-05-01') AND DATE(J1033359.validto)<= DATE('2016-05-31 >>00:00:00.0') ) OR ( J1033359.validto IS NULL AND >>DATE(J1031101.validfrom)<= DATE('2016-05-01') ) ) >> >> ORDER BY J1031101.validfrom DESC >> LIMIT 20 OFFSET 0 >> >>------ Original Message ------ >>From: "David Rowley" <david.rowley@2ndquadrant.com> >>To: "Sterpu Victor" <victor@caido.ro> >>Cc: "Rob Imig" <rimig88@gmail.com>; "PostgreSQL General" >><pgsql-general@postgresql.org>; "David G. Johnston" >><david.g.johnston@gmail.com> >>Sent: 9/5/2016 10:04:54 AM >>Subject: Re: [GENERAL] Slow query when the select list is big >> >>>On 9 May 2016 at 18:46, David G. Johnston >>><david.g.johnston@gmail.com> wrote: >>>> On Sunday, May 8, 2016, Sterpu Victor <victor@caido.ro> wrote: >>>>> >>>>> Yes but it is very big. >>>>> I don't understand why the select list is influencing the CPU >>>>>usage. >>>>> I was expecting that only the join and where clauses would >>>>>influence CPU. >>>>> >>>> >>>> PostgreSQL is smart enough to optimize away stuff that it knows >>>>doesn't >>>> impact the final query result. >>> >>>To be more accurate with what David is saying, PostgreSQL will remove >>>unused LEFT JOINed relations where the left joined relation can be >>>proved to not duplicate rows from the right hand side. It would just >>>be a matter of comparing the EXPLAINs from the query with all the >>>SELECT items to the one with the single SELECT item to prove that >>>this >>>is what's happening. >>> >>>Please also note that this only occurs with LEFT JOINs >>> >>>It would also be quite helpful for people if you were to include a >>>copy of the query. It's impossible to reverse engineer what that is >>>from this EXPLAIN output. I see that your using a windowing function >>>and performing a LIMIT 1, there may be ways to improve that just by >>>selecting the single highest j1031101.validfrom row and performing >>>the >>>joins to the other table on that single row, but that will depend on >>>which windowing function you're using as the function may require the >>>other rows in the window frame to calculate the correct result. >>> >>>-- >>> David Rowley http://www.2ndQuadrant.com/ >>> PostgreSQL Development, 24x7 Support, Training & Services >> >> >> >>-- Sent via pgsql-general mailing list (pgsql-general@postgresql.org) >>To make changes to your subscription: >>http://www.postgresql.org/mailpref/pgsql-general >
pgsql-general by date: