Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Простой запрос, а работает долго  [new]
PrettyMonstress
Member

Откуда:
Сообщений: 10
Помогите, пожалуйста, оптимизировать запрос!
Есть простейший запрос:
Ocновная таблица (dbo.PR) соединяется по LEFT OUTER JOIN со всеми остальными таблицами.
И вот беда, запрос выполняется периодически при необходимости, но время выполнения почему-то колеблется от 10 секунд до 2 часов.
Я построила estimated execution plan. И везде cost = 0% или 3%, а в одном месте написано 20% - Hash match right outer join (детали на вложенном скриншоте). Т.е. проблема с джойном одной таблицы. Может, на это поле индекс принудительно назначить хинтом к запросу (в оракле это называется хинты, с мс скл я не работала до этого)? Только не знаю, на какое поле: PR.originator_rel_id или person_relation.id?

А вот и сам запрос:
+
 SELECT     dbo.PR.id, dbo.PR.parent_id, dbo.project.name AS project, dbo.Person_Relation.name AS originator, dbo.PR_Status_Type.name AS status, 
                      dbo.TW_V_SAFETY_OFFICER.s_value AS safety_officer, CONVERT(varchar, dbo.TW_V_DATE_REPORT_SENT.date_value, 23) AS date_report_sent, 
                      dbo.TW_V_BUSINESS_UNIT_AFFECTED.s_value AS business_unit_affected, dbo.TW_V_REPORT_RECIPIENT.s_value AS report_recipient, CONVERT(varchar, 
                      dbo.TW_V_DATE_OF_THIS_REPORT.date_value, 23) AS date_this_report, dbo.TW_V_REFERENCE_NUMBER_BY_NCA.s_value AS ref_nr_NCA, 
                      dbo.TW_V_SERIOUS_PUBLIC_HEALTH_THREAT.s_value AS serious_publ_health, dbo.TW_V_CLASSIFICATION_OF_INCIDENT.s_value AS classification_of_incident, 
                      dbo.TW_V_STATUS_OF_SUBMITTER.s_value AS status_of_submitter, dbo.TW_V_OTHER_STATUS.s_value AS other_status_of_submitter, 
                      dbo.TW_V_PRODUCT_SERIAL_NUMBER.s_value AS prod_serial_nr, dbo.TW_V_MEDDEV_PRODUCT_CLASS.s_value AS MEDDEV_prod_class, 
                      dbo.TW_V_PRODUCT_TYPE.s_value AS prod_type, dbo.TW_V_DURATION_OF_IMPLANTATION.s_value AS duration_of_implantation, 
                      dbo.TW_V_SOFTWARE_VERSION_NUMBER.s_value AS sw_version_nr, CONVERT(varchar, dbo.TW_V_DATE_MFR_DEVICE.date_value, 23) AS date_mfr_device, 
                      dbo.TW_V_MODEL_NUMBER.s_value AS model_nr, dbo.TW_V_NOMENCLATURE_SYSTEM.s_value AS Nomenclature_system, 
                      dbo.TW_V_LOT_BATCH_NO_MANUALLY.s_value AS lot_batch_no_manually, dbo.TW_V_MEDICAL_PRODUCT_TYPE.s_value AS medical_product_type, 
                      CONVERT(varchar, dbo.TW_V_DATE_OF_EXPIRY.date_value, 23) AS date_of_expiry, dbo.TW_V_NOTIFY_BODY_ID.s_value AS notify_body_id, 
                      dbo.TW_V_CATALOG_NUMBER.s_value AS catalog_nr, CONVERT(varchar, dbo.TW_V_DATE_OF_EVENT.date_value, 23) AS date_of_event, 
                      dbo.TW_V_EVENT_DESCRIPTION.text AS event_description, dbo.TW_V_REPORT_REFERENCE_NO.s_value AS user_facility_report_ref_nr, 
                      dbo.TW_V_NUMBER_OF_PATIENTS_INVOLVED.s_value AS nr_of_patients_involved, 
                      dbo.TW_V_USAGE_OF_THE_MEDICAL_DEVICE.s_value AS usage_of_medical_device, 
                      dbo.TW_V_PRODUCT_CURRENT_LOCATION.s_value AS medical_device_curr_location, CONVERT(varchar, dbo.TW_V_DATE_AWARENESS.date_value, 23) 
                      AS date_awarness, dbo.TW_V_NUMBER_OF_MEDICAL_DEVICES.s_value AS nr_of_medical_devices, 
                      dbo.TW_V_OPERATOR_OF_THE_MEDICAL_DEVICE.s_value AS operator_of_medical_device, dbo.TW_V_PATIENT_OUTCOME.text AS patient_outcome, 
                      dbo.TW_V_REMEDIAL_ACTION_TAKEN.text AS remedial_actions, dbo.TW_V_PATIENT_AGE_DURING_INCIDENT.s_value AS age_of_patient_during_incident, 
                      dbo.TW_V_UNITS_AGE.s_value AS units_age, dbo.TW_V_WEIGHT.s_value AS weight_in_kg, dbo.TW_V_UNITS_WEIGHT.s_value AS units_weight, 
                      dbo.TW_V_PATIENT_GENDER_MANUALLY.s_value AS gender_manually, dbo.TW_V_CLINIC_NAME.s_value AS clinic_name, 
                      dbo.TW_V_CLINIC_NAME_MANUALLY.s_value AS clinic_name_manually, dbo.TW_V_CONTACT_PERSON_WITHIN_FACILITY.s_value AS contact_pers_within_facility, 
                      dbo.TW_V_CLINIC_CITY.s_value AS clinic_city, dbo.TW_V_CLINIC_CITY_MANUALLY.s_value AS clinic_city_manually, 
                      dbo.TW_V_CLINIC_COUNTRY.s_value AS clinic_country, dbo.TW_V_CLINIC_COUNTRY_MANUALLY.s_value AS clinic_country_manually, 
                      dbo.TW_V_REMEDIAL_ACTION.s_value AS remedial_action_CA_PA, dbo.TW_V_KNOWN_SIMILAR_INCIDENTS.s_value AS known_similar_incidents, 
                      dbo.TW_V_NO_OF_SIMILAR_INCIDENTS.s_value AS nr_of_similar_incidents, dbo.TW_V_SIMILAR_INCIDENTS_DETAILS.text AS similar_incidents_details, 
                      dbo.TW_V_AT.s_value AS AT, dbo.TW_V_BE.s_value AS BE, dbo.TW_V_BG.s_value AS BG, dbo.TW_V_CH.s_value AS CH, dbo.TW_V_CY.s_value AS CY, 
                      dbo.TW_V_CZ.s_value AS CZ, dbo.TW_V_DE.s_value AS DE, dbo.TW_V_DK.s_value AS DK, dbo.TW_V_EE.s_value AS EE, dbo.TW_V_ES.s_value AS ES, 
                      dbo.TW_V_FI.s_value AS FI, dbo.TW_V_FR.s_value AS FR, dbo.TW_V_GB.s_value AS GB, dbo.TW_V_GR.s_value AS GR, dbo.TW_V_IE.s_value AS IE, 
                      dbo.TW_V_IS.s_value AS island, dbo.TW_V_HU.s_value AS HU, dbo.TW_V_IT.s_value AS IT, dbo.TW_V_LI.s_value AS LI, dbo.TW_V_LT.s_value AS LT, 
                      dbo.TW_V_LU.s_value AS LU, dbo.TW_V_LV.s_value AS LV, dbo.TW_V_MT.s_value AS MT, dbo.TW_V_NL.s_value AS NL, dbo.TW_V_NO.s_value AS NO, 
                      dbo.TW_V_PL.s_value AS PL, dbo.TW_V_PT.s_value AS PT, dbo.TW_V_RO.s_value AS RO, dbo.TW_V_SE.s_value AS SE, dbo.TW_V_SI.s_value AS SI, 
                      dbo.TW_V_SK.s_value AS SK, dbo.TW_V_HR.s_value AS HR, dbo.TW_V_TR.s_value AS TR, 
                      dbo.TW_V_ALL_EEA_CANDIDATE_SWISS.s_value AS All_EEA_candidates_swiss, dbo.TW_V_OTHERS.s_value AS Others_countries, 
                      dbo.TW_V_TYPE_OF_REPORT_EMDV.s_value AS Type_of_report_emdv, dbo.TW_V_MFR_PRELIMINARY_ANALYSIS.s_value AS MFR_preliminary_analysis, 
                      dbo.TW_V_MFR_PRELIMINARY_ANALYSIS_NOTES.s_value AS MFR_prelim_analysis_notes, dbo.TW_V_INITIAL_CORRECTIVE_ACTIONS.s_value AS initial_CA, 
                      dbo.TW_V_DATE_OF_IMPLANTATION.s_value AS Date_Implantation, dbo.TW_V_DATE_OF_EXPLANTATION.s_value AS Date_Explantation, 
                      dbo.TW_V_RESULTS.text AS results, dbo.TW_V_INVESTIGATION_COMMENTS.text AS inv_comments, 
                      dbo.TW_V_OTHER_NCA_THIS_REPORT_WAS_SENT.s_value AS other_nca_this_report_was_sent, dbo.TW_V_NOMENCLATURE_CODE.s_value AS nomenclature_c, 
                      dbo.TW_V_NOMENCLATURE_TEXT.s_value AS nomenclature_t, dbo.TW_V_CLINIC_ADDRESS.s_value AS clinic_a, 
                      dbo.TW_V_CLINIC_ADDRESS_MANUALLY.s_value AS clinic_a_man, dbo.TW_V_CLINIC_POSTAL_CODE.s_value AS clinic_post, 
                      dbo.TW_V_CLINIC_POSTAL_CODE_MANUALLY.s_value AS clinic_post_man, dbo.TW_V_CLINIC_PHONE.s_value AS clinic_phone, 
                      dbo.TW_V_CLINIC_PHONE_MANUALLY.s_value AS clinic_phone_man, dbo.TW_V_CLINIC_FAX_NO.s_value AS clinic_fax, 
                      dbo.TW_V_CLINIC_FAX_NO_MANUALLY.s_value AS clinic_fax_man, dbo.TW_V_CLINIC_EMAIL.s_value AS clinic_email, 
                      dbo.TW_V_CLINIC_EMAIL_MANUALLY.s_value AS clinic_email_man, dbo.TW_V_TIME_FOR_IMPLEMENTATION.s_value AS time_for_impl, 
                      dbo.TW_V_FURTHER_INVESTIGATION.s_value AS further_inv, dbo.TW_V_ASSOCIATED_DEV_ACCESSORIES.s_value AS associated_dev, 
                      dbo.TW_V_OTHER_COMMENTS.text AS other_com, dbo.TW_V_PRODUCT_ELECTRODE_TYPE.s_value AS prod_el_type, CONVERT(varchar, 
                      dbo.TW_V_EXPECTED_DATE_OF_NEXT_REPORT.date_value, 23) AS expect_date_of_next_report, CONVERT(varchar, 
                      dbo.TW_V_DATE_OF_EXPLANTATION_MAN.date_value, 23) AS date_expl_man, dbo.TW_V_BRAND_NAME_EMDV.s_value AS brand_name_mdv, 
                      dbo.TW_V_PRODUCT_TYPE_EXTERNAL.s_value AS prod_type_ext, dbo.TW_V_PRODUCT_SERIAL_NUMBER_EXTERNAL.s_value AS prod_sn_ext, 
                      dbo.TW_V_DATE_OF_EVENT_ESTIMATED.s_value AS date_event_est, dbo.TW_V_MFR_PRELIM_ANALYSIS_DETAILS.text AS MFR_prelim_details
FROM         dbo.PR LEFT OUTER JOIN
                      dbo.TW_V_EXPECTED_DATE_OF_NEXT_REPORT ON dbo.PR.id = dbo.TW_V_EXPECTED_DATE_OF_NEXT_REPORT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_PRODUCT_SERIAL_NUMBER_EXTERNAL ON dbo.PR.id = dbo.TW_V_PRODUCT_SERIAL_NUMBER_EXTERNAL.pr_id LEFT OUTER JOIN
                      dbo.TW_V_BRAND_NAME_EMDV ON dbo.PR.id = dbo.TW_V_BRAND_NAME_EMDV.pr_id LEFT OUTER JOIN
                      dbo.TW_V_PRODUCT_TYPE_EXTERNAL ON dbo.PR.id = dbo.TW_V_PRODUCT_TYPE_EXTERNAL.pr_id LEFT OUTER JOIN
                      dbo.TW_V_PRODUCT_ELECTRODE_TYPE ON dbo.PR.id = dbo.TW_V_PRODUCT_ELECTRODE_TYPE.pr_id LEFT OUTER JOIN
                      dbo.TW_V_DATE_OF_EVENT_ESTIMATED ON dbo.PR.id = dbo.TW_V_DATE_OF_EVENT_ESTIMATED.pr_id LEFT OUTER JOIN
                      dbo.TW_V_DATE_OF_EXPLANTATION_MAN ON dbo.PR.id = dbo.TW_V_DATE_OF_EXPLANTATION_MAN.pr_id LEFT OUTER JOIN
                      dbo.TW_V_FURTHER_INVESTIGATION ON dbo.PR.id = dbo.TW_V_FURTHER_INVESTIGATION.pr_id LEFT OUTER JOIN
                      dbo.TW_V_ASSOCIATED_DEV_ACCESSORIES ON dbo.PR.id = dbo.TW_V_ASSOCIATED_DEV_ACCESSORIES.pr_id LEFT OUTER JOIN
                      dbo.TW_V_OTHER_COMMENTS ON dbo.PR.id = dbo.TW_V_OTHER_COMMENTS.pr_id LEFT OUTER JOIN
                      dbo.TW_V_TIME_FOR_IMPLEMENTATION ON dbo.PR.id = dbo.TW_V_TIME_FOR_IMPLEMENTATION.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLINIC_POSTAL_CODE_MANUALLY ON dbo.PR.id = dbo.TW_V_CLINIC_POSTAL_CODE_MANUALLY.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLINIC_POSTAL_CODE ON dbo.PR.id = dbo.TW_V_CLINIC_POSTAL_CODE.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLINIC_PHONE_MANUALLY ON dbo.PR.id = dbo.TW_V_CLINIC_PHONE_MANUALLY.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLINIC_FAX_NO_MANUALLY ON dbo.PR.id = dbo.TW_V_CLINIC_FAX_NO_MANUALLY.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLINIC_PHONE ON dbo.PR.id = dbo.TW_V_CLINIC_PHONE.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLINIC_FAX_NO ON dbo.PR.id = dbo.TW_V_CLINIC_FAX_NO.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLINIC_EMAIL_MANUALLY ON dbo.PR.id = dbo.TW_V_CLINIC_EMAIL_MANUALLY.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLINIC_EMAIL ON dbo.PR.id = dbo.TW_V_CLINIC_EMAIL.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLINIC_ADDRESS_MANUALLY ON dbo.PR.id = dbo.TW_V_CLINIC_ADDRESS_MANUALLY.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLINIC_ADDRESS ON dbo.PR.id = dbo.TW_V_CLINIC_ADDRESS.pr_id LEFT OUTER JOIN
                      dbo.TW_V_NOMENCLATURE_TEXT ON dbo.PR.id = dbo.TW_V_NOMENCLATURE_TEXT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_NOMENCLATURE_CODE ON dbo.PR.id = dbo.TW_V_NOMENCLATURE_CODE.pr_id LEFT OUTER JOIN
                      dbo.TW_V_OTHER_NCA_THIS_REPORT_WAS_SENT ON dbo.PR.id = dbo.TW_V_OTHER_NCA_THIS_REPORT_WAS_SENT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_BUSINESS_UNIT_AFFECTED ON dbo.PR.id = dbo.TW_V_BUSINESS_UNIT_AFFECTED.pr_id LEFT OUTER JOIN
                      dbo.TW_V_MFR_PRELIM_ANALYSIS_DETAILS ON dbo.PR.id = dbo.TW_V_MFR_PRELIM_ANALYSIS_DETAILS.pr_id LEFT OUTER JOIN
                      dbo.TW_V_INVESTIGATION_COMMENTS ON dbo.PR.id = dbo.TW_V_INVESTIGATION_COMMENTS.pr_id LEFT OUTER JOIN
                      dbo.TW_V_RESULTS ON dbo.PR.id = dbo.TW_V_RESULTS.pr_id LEFT OUTER JOIN
                      dbo.TW_V_DATE_OF_EXPLANTATION ON dbo.PR.id = dbo.TW_V_DATE_OF_EXPLANTATION.pr_id LEFT OUTER JOIN
                      dbo.TW_V_DATE_OF_IMPLANTATION ON dbo.PR.id = dbo.TW_V_DATE_OF_IMPLANTATION.pr_id LEFT OUTER JOIN
                      dbo.TW_V_INITIAL_CORRECTIVE_ACTIONS ON dbo.PR.id = dbo.TW_V_INITIAL_CORRECTIVE_ACTIONS.pr_id LEFT OUTER JOIN
                      dbo.TW_V_MFR_PRELIMINARY_ANALYSIS_NOTES ON dbo.PR.id = dbo.TW_V_MFR_PRELIMINARY_ANALYSIS_NOTES.pr_id LEFT OUTER JOIN
                      dbo.TW_V_MFR_PRELIMINARY_ANALYSIS ON dbo.PR.id = dbo.TW_V_MFR_PRELIMINARY_ANALYSIS.pr_id LEFT OUTER JOIN
                      dbo.TW_V_TYPE_OF_REPORT_EMDV ON dbo.PR.id = dbo.TW_V_TYPE_OF_REPORT_EMDV.pr_id LEFT OUTER JOIN
                      dbo.TW_V_OTHERS ON dbo.PR.id = dbo.TW_V_OTHERS.pr_id LEFT OUTER JOIN
                      dbo.TW_V_IT ON dbo.PR.id = dbo.TW_V_IT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_TR ON dbo.PR.id = dbo.TW_V_TR.pr_id LEFT OUTER JOIN
                      dbo.TW_V_ALL_EEA_CANDIDATE_SWISS ON dbo.PR.id = dbo.TW_V_ALL_EEA_CANDIDATE_SWISS.pr_id LEFT OUTER JOIN
                      dbo.TW_V_SK ON dbo.PR.id = dbo.TW_V_SK.pr_id LEFT OUTER JOIN
                      dbo.TW_V_SI ON dbo.PR.id = dbo.TW_V_SI.pr_id LEFT OUTER JOIN
                      dbo.TW_V_PL ON dbo.PR.id = dbo.TW_V_PL.pr_id LEFT OUTER JOIN
                      dbo.TW_V_SE ON dbo.PR.id = dbo.TW_V_SE.pr_id LEFT OUTER JOIN
                      dbo.TW_V_RO ON dbo.PR.id = dbo.TW_V_RO.pr_id LEFT OUTER JOIN
                      dbo.TW_V_PT ON dbo.PR.id = dbo.TW_V_PT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_LV ON dbo.PR.id = dbo.TW_V_LV.pr_id LEFT OUTER JOIN
                      dbo.TW_V_NO ON dbo.PR.id = dbo.TW_V_NO.pr_id LEFT OUTER JOIN
                      dbo.TW_V_NL ON dbo.PR.id = dbo.TW_V_NL.pr_id LEFT OUTER JOIN
                      dbo.TW_V_MT ON dbo.PR.id = dbo.TW_V_MT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_LI ON dbo.PR.id = dbo.TW_V_LI.pr_id LEFT OUTER JOIN
                      dbo.TW_V_LU ON dbo.PR.id = dbo.TW_V_LU.pr_id LEFT OUTER JOIN
                      dbo.TW_V_LT ON dbo.PR.id = dbo.TW_V_LT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_HU ON dbo.PR.id = dbo.TW_V_HU.pr_id LEFT OUTER JOIN
                      dbo.TW_V_IS ON dbo.PR.id = dbo.TW_V_IS.pr_id LEFT OUTER JOIN
                      dbo.TW_V_HR ON dbo.PR.id = dbo.TW_V_HR.pr_id LEFT OUTER JOIN
                      dbo.TW_V_IE ON dbo.PR.id = dbo.TW_V_IE.pr_id LEFT OUTER JOIN
                      dbo.TW_V_FR ON dbo.PR.id = dbo.TW_V_FR.pr_id LEFT OUTER JOIN
                      dbo.TW_V_GR ON dbo.PR.id = dbo.TW_V_GR.pr_id LEFT OUTER JOIN
                      dbo.TW_V_FI ON dbo.PR.id = dbo.TW_V_FI.pr_id LEFT OUTER JOIN
                      dbo.TW_V_GB ON dbo.PR.id = dbo.TW_V_GB.pr_id LEFT OUTER JOIN
                      dbo.TW_V_DK ON dbo.PR.id = dbo.TW_V_DK.pr_id LEFT OUTER JOIN
                      dbo.TW_V_ES ON dbo.PR.id = dbo.TW_V_ES.pr_id LEFT OUTER JOIN
                      dbo.TW_V_DE ON dbo.PR.id = dbo.TW_V_DE.pr_id LEFT OUTER JOIN
                      dbo.TW_V_EE ON dbo.PR.id = dbo.TW_V_EE.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CZ ON dbo.PR.id = dbo.TW_V_CZ.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CY ON dbo.PR.id = dbo.TW_V_CY.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CH ON dbo.PR.id = dbo.TW_V_CH.pr_id LEFT OUTER JOIN
                      dbo.TW_V_BG ON dbo.PR.id = dbo.TW_V_BG.pr_id LEFT OUTER JOIN
                      dbo.TW_V_BE ON dbo.PR.id = dbo.TW_V_BE.pr_id LEFT OUTER JOIN
                      dbo.TW_V_AT ON dbo.PR.id = dbo.TW_V_AT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_SIMILAR_INCIDENTS_DETAILS ON dbo.PR.id = dbo.TW_V_SIMILAR_INCIDENTS_DETAILS.pr_id LEFT OUTER JOIN
                      dbo.TW_V_NO_OF_SIMILAR_INCIDENTS ON dbo.PR.id = dbo.TW_V_NO_OF_SIMILAR_INCIDENTS.pr_id LEFT OUTER JOIN
                      dbo.TW_V_KNOWN_SIMILAR_INCIDENTS ON dbo.PR.id = dbo.TW_V_KNOWN_SIMILAR_INCIDENTS.pr_id LEFT OUTER JOIN
                      dbo.TW_V_REMEDIAL_ACTION ON dbo.PR.id = dbo.TW_V_REMEDIAL_ACTION.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLINIC_COUNTRY_MANUALLY ON dbo.PR.id = dbo.TW_V_CLINIC_COUNTRY_MANUALLY.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLINIC_COUNTRY ON dbo.PR.id = dbo.TW_V_CLINIC_COUNTRY.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLINIC_CITY_MANUALLY ON dbo.PR.id = dbo.TW_V_CLINIC_CITY_MANUALLY.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLINIC_NAME_MANUALLY ON dbo.PR.id = dbo.TW_V_CLINIC_NAME_MANUALLY.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLINIC_CITY ON dbo.PR.id = dbo.TW_V_CLINIC_CITY.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CONTACT_PERSON_WITHIN_FACILITY ON dbo.PR.id = dbo.TW_V_CONTACT_PERSON_WITHIN_FACILITY.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLINIC_NAME ON dbo.PR.id = dbo.TW_V_CLINIC_NAME.pr_id LEFT OUTER JOIN
                      dbo.TW_V_UNITS_AGE ON dbo.PR.id = dbo.TW_V_UNITS_AGE.pr_id LEFT OUTER JOIN
                      dbo.TW_V_UNITS_WEIGHT ON dbo.PR.id = dbo.TW_V_UNITS_WEIGHT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_PATIENT_GENDER_MANUALLY ON dbo.PR.id = dbo.TW_V_PATIENT_GENDER_MANUALLY.pr_id LEFT OUTER JOIN
                      dbo.TW_V_WEIGHT ON dbo.PR.id = dbo.TW_V_WEIGHT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_PATIENT_AGE_DURING_INCIDENT ON dbo.PR.id = dbo.TW_V_PATIENT_AGE_DURING_INCIDENT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_REMEDIAL_ACTION_TAKEN ON dbo.PR.id = dbo.TW_V_REMEDIAL_ACTION_TAKEN.pr_id LEFT OUTER JOIN
                      dbo.TW_V_PATIENT_OUTCOME ON dbo.PR.id = dbo.TW_V_PATIENT_OUTCOME.pr_id LEFT OUTER JOIN
                      dbo.TW_V_OPERATOR_OF_THE_MEDICAL_DEVICE ON dbo.PR.id = dbo.TW_V_OPERATOR_OF_THE_MEDICAL_DEVICE.pr_id LEFT OUTER JOIN
                      dbo.TW_V_NUMBER_OF_MEDICAL_DEVICES ON dbo.PR.id = dbo.TW_V_NUMBER_OF_MEDICAL_DEVICES.pr_id LEFT OUTER JOIN
                      dbo.TW_V_DATE_AWARENESS ON dbo.PR.id = dbo.TW_V_DATE_AWARENESS.pr_id LEFT OUTER JOIN
                      dbo.TW_V_PRODUCT_CURRENT_LOCATION ON dbo.PR.id = dbo.TW_V_PRODUCT_CURRENT_LOCATION.pr_id LEFT OUTER JOIN
                      dbo.TW_V_USAGE_OF_THE_MEDICAL_DEVICE ON dbo.PR.id = dbo.TW_V_USAGE_OF_THE_MEDICAL_DEVICE.pr_id LEFT OUTER JOIN
                      dbo.TW_V_NUMBER_OF_PATIENTS_INVOLVED ON dbo.PR.id = dbo.TW_V_NUMBER_OF_PATIENTS_INVOLVED.pr_id LEFT OUTER JOIN
                      dbo.TW_V_REPORT_REFERENCE_NO ON dbo.PR.id = dbo.TW_V_REPORT_REFERENCE_NO.pr_id LEFT OUTER JOIN
                      dbo.TW_V_EVENT_DESCRIPTION ON dbo.PR.id = dbo.TW_V_EVENT_DESCRIPTION.pr_id LEFT OUTER JOIN
                      dbo.TW_V_DATE_OF_EVENT ON dbo.PR.id = dbo.TW_V_DATE_OF_EVENT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CATALOG_NUMBER ON dbo.PR.id = dbo.TW_V_CATALOG_NUMBER.pr_id LEFT OUTER JOIN
                      dbo.TW_V_NOTIFY_BODY_ID ON dbo.PR.id = dbo.TW_V_NOTIFY_BODY_ID.pr_id LEFT OUTER JOIN
                      dbo.TW_V_DATE_OF_EXPIRY ON dbo.PR.id = dbo.TW_V_DATE_OF_EXPIRY.pr_id LEFT OUTER JOIN
                      dbo.TW_V_MEDICAL_PRODUCT_TYPE ON dbo.PR.id = dbo.TW_V_MEDICAL_PRODUCT_TYPE.pr_id LEFT OUTER JOIN
                      dbo.TW_V_LOT_BATCH_NO_MANUALLY ON dbo.PR.id = dbo.TW_V_LOT_BATCH_NO_MANUALLY.pr_id LEFT OUTER JOIN
                      dbo.TW_V_NOMENCLATURE_SYSTEM ON dbo.PR.id = dbo.TW_V_NOMENCLATURE_SYSTEM.pr_id LEFT OUTER JOIN
                      dbo.TW_V_MODEL_NUMBER ON dbo.PR.id = dbo.TW_V_MODEL_NUMBER.pr_id LEFT OUTER JOIN
                      dbo.TW_V_DATE_MFR_DEVICE ON dbo.PR.id = dbo.TW_V_DATE_MFR_DEVICE.pr_id LEFT OUTER JOIN
                      dbo.TW_V_SOFTWARE_VERSION_NUMBER ON dbo.PR.id = dbo.TW_V_SOFTWARE_VERSION_NUMBER.pr_id LEFT OUTER JOIN
                      dbo.TW_V_DURATION_OF_IMPLANTATION ON dbo.PR.id = dbo.TW_V_DURATION_OF_IMPLANTATION.pr_id LEFT OUTER JOIN
                      dbo.TW_V_PRODUCT_TYPE ON dbo.PR.id = dbo.TW_V_PRODUCT_TYPE.pr_id LEFT OUTER JOIN
                      dbo.TW_V_MEDDEV_PRODUCT_CLASS ON dbo.PR.id = dbo.TW_V_MEDDEV_PRODUCT_CLASS.pr_id LEFT OUTER JOIN
                      dbo.TW_V_PRODUCT_SERIAL_NUMBER ON dbo.PR.id = dbo.TW_V_PRODUCT_SERIAL_NUMBER.pr_id LEFT OUTER JOIN
                      dbo.TW_V_STATUS_OF_SUBMITTER ON dbo.PR.id = dbo.TW_V_STATUS_OF_SUBMITTER.pr_id LEFT OUTER JOIN
                      dbo.TW_V_OTHER_STATUS ON dbo.PR.id = dbo.TW_V_OTHER_STATUS.pr_id LEFT OUTER JOIN
                      dbo.TW_V_CLASSIFICATION_OF_INCIDENT ON dbo.PR.id = dbo.TW_V_CLASSIFICATION_OF_INCIDENT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_SERIOUS_PUBLIC_HEALTH_THREAT ON dbo.PR.id = dbo.TW_V_SERIOUS_PUBLIC_HEALTH_THREAT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_REFERENCE_NUMBER_BY_NCA ON dbo.PR.id = dbo.TW_V_REFERENCE_NUMBER_BY_NCA.pr_id LEFT OUTER JOIN
                      dbo.TW_V_DATE_OF_THIS_REPORT ON dbo.PR.id = dbo.TW_V_DATE_OF_THIS_REPORT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_REPORT_RECIPIENT ON dbo.PR.id = dbo.TW_V_REPORT_RECIPIENT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_DATE_REPORT_SENT ON dbo.PR.id = dbo.TW_V_DATE_REPORT_SENT.pr_id LEFT OUTER JOIN
                      dbo.TW_V_SAFETY_OFFICER ON dbo.PR.id = dbo.TW_V_SAFETY_OFFICER.pr_id LEFT OUTER JOIN
                      dbo.Person_Relation ON dbo.PR.originator_rel_id = dbo.Person_Relation.id LEFT OUTER JOIN
                      dbo.PR_Status_Type ON dbo.PR.status_type = dbo.PR_Status_Type.id LEFT OUTER JOIN
                      dbo.project ON dbo.PR.project_id = dbo.project.id
WHERE     (dbo.project.name = N'eMDV') AND (dbo.PR_Status_Type.name = N'Pending Submission' OR
                      dbo.PR_Status_Type.name = N'Pending Safety Officer Approval')
 


К сообщению приложен файл. Размер - 69Kb


Сообщение было отредактировано: 3 дек 13, 16:41
3 дек 13, 16:27    [15233385]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
Glory
Member

Откуда:
Сообщений: 104751
PrettyMonstress
Есть простейший запрос:

Мда. Что тогда есть сложный запрос ? В котором число таблиц идет на тысячи ?

PrettyMonstress
Только не знаю, на какое поле: PR.originator_rel_id или person_relation.id?

Что мешает попробывать все варианты ?
3 дек 13, 16:30    [15233409]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
PrettyMonstress
Member

Откуда:
Сообщений: 10
Glory
Что мешает попробывать все варианты ?

Вопрос был к специалистам.
Которые по скриншоту поймут. Там же всё написано :-)
Но мне не понятно, потому что я с мс скл не работала.
Поэтому и прошу знающих людей подсказать, в каком из полей этого джойна проблема - в основной таблице или в дополнительной, из которой мне только name нужен :(
3 дек 13, 16:35    [15233458]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
varelchik_f
Member

Откуда:
Сообщений: 9
Glory,

Зачет!
3 дек 13, 16:36    [15233463]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
varelchik_f
Member

Откуда:
Сообщений: 9
PrettyMonstress,

Для начала немешало бы хинтов наставить.
3 дек 13, 16:38    [15233482]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
Glory
Member

Откуда:
Сообщений: 104751
PrettyMonstress
Которые по скриншоту поймут.

Это к Кашпировскому тогда

PrettyMonstress
Там же всё написано :-)

Даже не поспоришь. Таки написано

PrettyMonstress
Поэтому и прошу знающих людей подсказать, в каком из полей этого джойна проблема - в основной таблице или в дополнительной, из которой мне только name нужен :(

Проблема в 17ой строке. Как всегда.
3 дек 13, 16:39    [15233493]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
varelchik_f
Member

Откуда:
Сообщений: 9
FROM dbo.PR (nolock)
везде перед ON
3 дек 13, 16:40    [15233507]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
varelchik_f
Member

Откуда:
Сообщений: 9
т.е. замени ON на (nolock) on
3 дек 13, 16:53    [15233618]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
PrettyMonstress
Я построила estimated execution plan.
Это слишком мало чтобы сказать почему 2 часа.
Нужно было отловить план запроса того тормозного случая.
Более того, надо было сюда сразу план положить, а не обрывок скрина. Или вы такой спец чтобы сказать что важно в плане а что нет?!
PrettyMonstress
И везде cost = 0% или 3%
И с каким типом LOOP или MERGE. Скорее LOOP - но это гадание.
Вы пришли издеваться над людьми сюда. Скажите адрес - мы тоже придём поиздеваться.
PrettyMonstress
в одном месте написано 20% - Hash match right outer join (детали на вложенном скриншоте). Т.е. проблема с джойном одной таблицы. Может, на это поле индекс принудительно назначить хинтом к запросу (в оракле это называется хинты, с мс скл я не работала до этого)? Только не знаю, на какое поле: PR.originator_rel_id или person_relation.id?
Судя по скрину и если я не путаю местами строится хеш по полю dbo.Person_Relation.id и далее матчится основная табла (dbo.PR.originator_rel_id).
Т.к. dbo.PR.originator_rel_id не упорядочен, то поэтому и хеш.
Можно сделать принудительно:
а) упорядочить по originator_rel_id чтобы сработал быстрый MERGE
б) поставить принудительный LOOP для dbo.Person_Relation:
+
SELECT		T.id
,		T.parent_id
,		P.name									AS project
,		R.name									AS originator
,		S.name									AS status
------------------------------------------------------------------------------------------
,		dbo.TW_V_SAFETY_OFFICER				.s_value		AS safety_officer
,Convert(VarChar,dbo.TW_V_DATE_REPORT_SENT			.date_value	,23)	AS date_report_sent
,		dbo.TW_V_BUSINESS_UNIT_AFFECTED			.s_value		AS business_unit_affected
,		dbo.TW_V_REPORT_RECIPIENT			.s_value		AS report_recipient
,Convert(VarChar,dbo.TW_V_DATE_OF_THIS_REPORT			.date_value	,23)	AS date_this_report
,		dbo.TW_V_REFERENCE_NUMBER_BY_NCA		.s_value		AS ref_nr_NCA
,		dbo.TW_V_SERIOUS_PUBLIC_HEALTH_THREAT		.s_value		AS serious_publ_health
,		dbo.TW_V_CLASSIFICATION_OF_INCIDENT		.s_value		AS classification_of_incident
,		dbo.TW_V_STATUS_OF_SUBMITTER			.s_value		AS status_of_submitter
,		dbo.TW_V_OTHER_STATUS				.s_value		AS other_status_of_submitter
,		dbo.TW_V_PRODUCT_SERIAL_NUMBER			.s_value		AS prod_serial_nr
,		dbo.TW_V_MEDDEV_PRODUCT_CLASS			.s_value		AS MEDDEV_prod_class
,		dbo.TW_V_PRODUCT_TYPE				.s_value		AS prod_type
,		dbo.TW_V_DURATION_OF_IMPLANTATION		.s_value		AS duration_of_implantation
,		dbo.TW_V_SOFTWARE_VERSION_NUMBER		.s_value		AS sw_version_nr
,Convert(VarChar,dbo.TW_V_DATE_MFR_DEVICE			.date_value	,23)	AS date_mfr_device
,		dbo.TW_V_MODEL_NUMBER				.s_value		AS model_nr
,		dbo.TW_V_NOMENCLATURE_SYSTEM			.s_value		AS Nomenclature_system
,		dbo.TW_V_LOT_BATCH_NO_MANUALLY			.s_value		AS lot_batch_no_manually
,		dbo.TW_V_MEDICAL_PRODUCT_TYPE			.s_value		AS medical_product_type
,Convert(VarChar,dbo.TW_V_DATE_OF_EXPIRY			.date_value	,23)	AS date_of_expiry
,		dbo.TW_V_NOTIFY_BODY_ID				.s_value		AS notify_body_id
,		dbo.TW_V_CATALOG_NUMBER				.s_value		AS catalog_nr
,Convert(VarChar,dbo.TW_V_DATE_OF_EVENT				.date_value	,23)	AS date_of_event
,		dbo.TW_V_EVENT_DESCRIPTION			.text			AS event_description
,		dbo.TW_V_REPORT_REFERENCE_NO			.s_value		AS user_facility_report_ref_nr
,		dbo.TW_V_NUMBER_OF_PATIENTS_INVOLVED		.s_value		AS nr_of_patients_involved
,		dbo.TW_V_USAGE_OF_THE_MEDICAL_DEVICE		.s_value		AS usage_of_medical_device
,		dbo.TW_V_PRODUCT_CURRENT_LOCATION		.s_value		AS medical_device_curr_location
,Convert(VarChar,dbo.TW_V_DATE_AWARENESS			.date_value	,23)	AS date_awarness
,		dbo.TW_V_NUMBER_OF_MEDICAL_DEVICES		.s_value		AS nr_of_medical_devices
,		dbo.TW_V_OPERATOR_OF_THE_MEDICAL_DEVICE		.s_value		AS operator_of_medical_device
,		dbo.TW_V_PATIENT_OUTCOME			.text			AS patient_outcome
,		dbo.TW_V_REMEDIAL_ACTION_TAKEN			.text			AS remedial_actions
,		dbo.TW_V_PATIENT_AGE_DURING_INCIDENT		.s_value		AS age_of_patient_during_incident
,		dbo.TW_V_UNITS_AGE				.s_value		AS units_age
,		dbo.TW_V_WEIGHT					.s_value		AS weight_in_kg
,		dbo.TW_V_UNITS_WEIGHT				.s_value		AS units_weight
,		dbo.TW_V_PATIENT_GENDER_MANUALLY		.s_value		AS gender_manually
,		dbo.TW_V_CLINIC_NAME				.s_value		AS clinic_name
,		dbo.TW_V_CLINIC_NAME_MANUALLY			.s_value		AS clinic_name_manually
,		dbo.TW_V_CONTACT_PERSON_WITHIN_FACILITY		.s_value		AS contact_pers_within_facility
,		dbo.TW_V_CLINIC_CITY				.s_value		AS clinic_city
,		dbo.TW_V_CLINIC_CITY_MANUALLY			.s_value		AS clinic_city_manually
,		dbo.TW_V_CLINIC_COUNTRY				.s_value		AS clinic_country
,		dbo.TW_V_CLINIC_COUNTRY_MANUALLY		.s_value		AS clinic_country_manually
,		dbo.TW_V_REMEDIAL_ACTION			.s_value		AS remedial_action_CA_PA
,		dbo.TW_V_KNOWN_SIMILAR_INCIDENTS		.s_value		AS known_similar_incidents
,		dbo.TW_V_NO_OF_SIMILAR_INCIDENTS		.s_value		AS nr_of_similar_incidents
,		dbo.TW_V_SIMILAR_INCIDENTS_DETAILS		.text			AS similar_incidents_details
,		dbo.TW_V_AT					.s_value		AS AT
,		dbo.TW_V_BE					.s_value		AS BE
,		dbo.TW_V_BG					.s_value		AS BG
,		dbo.TW_V_CH					.s_value		AS CH
,		dbo.TW_V_CY					.s_value		AS CY
,		dbo.TW_V_CZ					.s_value		AS CZ
,		dbo.TW_V_DE					.s_value		AS DE
,		dbo.TW_V_DK					.s_value		AS DK
,		dbo.TW_V_EE					.s_value		AS EE
,		dbo.TW_V_ES					.s_value		AS ES
,		dbo.TW_V_FI					.s_value		AS FI
,		dbo.TW_V_FR					.s_value		AS FR
,		dbo.TW_V_GB					.s_value		AS GB
,		dbo.TW_V_GR					.s_value		AS GR
,		dbo.TW_V_IE					.s_value		AS IE
,		dbo.TW_V_IS					.s_value		AS island
,		dbo.TW_V_HU					.s_value		AS HU
,		dbo.TW_V_IT					.s_value		AS IT
,		dbo.TW_V_LI					.s_value		AS LI
,		dbo.TW_V_LT					.s_value		AS LT
,		dbo.TW_V_LU					.s_value		AS LU
,		dbo.TW_V_LV					.s_value		AS LV
,		dbo.TW_V_MT					.s_value		AS MT
,		dbo.TW_V_NL					.s_value		AS NL
,		dbo.TW_V_NO					.s_value		AS NO
,		dbo.TW_V_PL					.s_value		AS PL
,		dbo.TW_V_PT					.s_value		AS PT
,		dbo.TW_V_RO					.s_value		AS RO
,		dbo.TW_V_SE					.s_value		AS SE
,		dbo.TW_V_SI					.s_value		AS SI
,		dbo.TW_V_SK					.s_value		AS SK
,		dbo.TW_V_HR					.s_value		AS HR
,		dbo.TW_V_TR					.s_value		AS TR
,		dbo.TW_V_ALL_EEA_CANDIDATE_SWISS		.s_value		AS All_EEA_candidates_swiss
,		dbo.TW_V_OTHERS					.s_value		AS Others_countries
,		dbo.TW_V_TYPE_OF_REPORT_EMDV			.s_value		AS Type_of_report_emdv
,		dbo.TW_V_MFR_PRELIMINARY_ANALYSIS		.s_value		AS MFR_preliminary_analysis
,		dbo.TW_V_MFR_PRELIMINARY_ANALYSIS_NOTES		.s_value		AS MFR_prelim_analysis_notes
,		dbo.TW_V_INITIAL_CORRECTIVE_ACTIONS		.s_value		AS initial_CA
,		dbo.TW_V_DATE_OF_IMPLANTATION			.s_value		AS Date_Implantation
,		dbo.TW_V_DATE_OF_EXPLANTATION			.s_value		AS Date_Explantation
,		dbo.TW_V_RESULTS				.text			AS results
,		dbo.TW_V_INVESTIGATION_COMMENTS			.text			AS inv_comments
,		dbo.TW_V_OTHER_NCA_THIS_REPORT_WAS_SENT		.s_value		AS other_nca_this_report_was_sent
,		dbo.TW_V_NOMENCLATURE_CODE			.s_value		AS nomenclature_c
,		dbo.TW_V_NOMENCLATURE_TEXT			.s_value		AS nomenclature_t
,		dbo.TW_V_CLINIC_ADDRESS				.s_value		AS clinic_a
,		dbo.TW_V_CLINIC_ADDRESS_MANUALLY		.s_value		AS clinic_a_man
,		dbo.TW_V_CLINIC_POSTAL_CODE			.s_value		AS clinic_post
,		dbo.TW_V_CLINIC_POSTAL_CODE_MANUALLY		.s_value		AS clinic_post_man
,		dbo.TW_V_CLINIC_PHONE				.s_value		AS clinic_phone
,		dbo.TW_V_CLINIC_PHONE_MANUALLY			.s_value		AS clinic_phone_man
,		dbo.TW_V_CLINIC_FAX_NO				.s_value		AS clinic_fax
,		dbo.TW_V_CLINIC_FAX_NO_MANUALLY			.s_value		AS clinic_fax_man
,		dbo.TW_V_CLINIC_EMAIL				.s_value		AS clinic_email
,		dbo.TW_V_CLINIC_EMAIL_MANUALLY			.s_value		AS clinic_email_man
,		dbo.TW_V_TIME_FOR_IMPLEMENTATION		.s_value		AS time_for_impl
,		dbo.TW_V_FURTHER_INVESTIGATION			.s_value		AS further_inv
,		dbo.TW_V_ASSOCIATED_DEV_ACCESSORIES		.s_value		AS associated_dev
,		dbo.TW_V_OTHER_COMMENTS				.text			AS other_com
,		dbo.TW_V_PRODUCT_ELECTRODE_TYPE			.s_value		AS prod_el_type
,Convert(VarChar,dbo.TW_V_EXPECTED_DATE_OF_NEXT_REPORT		.date_value	,23)	AS expect_date_of_next_report
,Convert(VarChar,dbo.TW_V_DATE_OF_EXPLANTATION_MAN		.date_value	,23)	AS date_expl_man
,		dbo.TW_V_BRAND_NAME_EMDV			.s_value		AS brand_name_mdv
,		dbo.TW_V_PRODUCT_TYPE_EXTERNAL			.s_value		AS prod_type_ext
,		dbo.TW_V_PRODUCT_SERIAL_NUMBER_EXTERNAL		.s_value		AS prod_sn_ext
,		dbo.TW_V_DATE_OF_EVENT_ESTIMATED		.s_value		AS date_event_est
,		dbo.TW_V_MFR_PRELIM_ANALYSIS_DETAILS		.text			AS MFR_prelim_details
FROM		dbo.PR					T
LEFT LOOP JOIN	dbo.Person_Relation			R ON R.id = T.originator_rel_id
LEFT JOIN	dbo.PR_Status_Type			S ON S.id = T.status_type
LEFT JOIN	dbo.project				P ON P.id = T.project_id
------------------------------------------------------------------------------------------
LEFT JOIN	dbo.TW_V_EXPECTED_DATE_OF_NEXT_REPORT	ON T.id = dbo.TW_V_EXPECTED_DATE_OF_NEXT_REPORT		.pr_id
LEFT JOIN	dbo.TW_V_PRODUCT_SERIAL_NUMBER_EXTERNAL	ON T.id = dbo.TW_V_PRODUCT_SERIAL_NUMBER_EXTERNAL	.pr_id
LEFT JOIN	dbo.TW_V_BRAND_NAME_EMDV		ON T.id = dbo.TW_V_BRAND_NAME_EMDV			.pr_id
LEFT JOIN	dbo.TW_V_PRODUCT_TYPE_EXTERNAL		ON T.id = dbo.TW_V_PRODUCT_TYPE_EXTERNAL		.pr_id
LEFT JOIN	dbo.TW_V_PRODUCT_ELECTRODE_TYPE		ON T.id = dbo.TW_V_PRODUCT_ELECTRODE_TYPE		.pr_id
LEFT JOIN	dbo.TW_V_DATE_OF_EVENT_ESTIMATED	ON T.id = dbo.TW_V_DATE_OF_EVENT_ESTIMATED		.pr_id
LEFT JOIN	dbo.TW_V_DATE_OF_EXPLANTATION_MAN	ON T.id = dbo.TW_V_DATE_OF_EXPLANTATION_MAN		.pr_id
LEFT JOIN	dbo.TW_V_FURTHER_INVESTIGATION		ON T.id = dbo.TW_V_FURTHER_INVESTIGATION		.pr_id
LEFT JOIN	dbo.TW_V_ASSOCIATED_DEV_ACCESSORIES	ON T.id = dbo.TW_V_ASSOCIATED_DEV_ACCESSORIES		.pr_id
LEFT JOIN	dbo.TW_V_OTHER_COMMENTS			ON T.id = dbo.TW_V_OTHER_COMMENTS			.pr_id
LEFT JOIN	dbo.TW_V_TIME_FOR_IMPLEMENTATION	ON T.id = dbo.TW_V_TIME_FOR_IMPLEMENTATION		.pr_id
LEFT JOIN	dbo.TW_V_CLINIC_POSTAL_CODE_MANUALLY	ON T.id = dbo.TW_V_CLINIC_POSTAL_CODE_MANUALLY		.pr_id
LEFT JOIN	dbo.TW_V_CLINIC_POSTAL_CODE		ON T.id = dbo.TW_V_CLINIC_POSTAL_CODE			.pr_id
LEFT JOIN	dbo.TW_V_CLINIC_PHONE_MANUALLY		ON T.id = dbo.TW_V_CLINIC_PHONE_MANUALLY		.pr_id
LEFT JOIN	dbo.TW_V_CLINIC_FAX_NO_MANUALLY		ON T.id = dbo.TW_V_CLINIC_FAX_NO_MANUALLY		.pr_id
LEFT JOIN	dbo.TW_V_CLINIC_PHONE			ON T.id = dbo.TW_V_CLINIC_PHONE				.pr_id
LEFT JOIN	dbo.TW_V_CLINIC_FAX_NO			ON T.id = dbo.TW_V_CLINIC_FAX_NO			.pr_id
LEFT JOIN	dbo.TW_V_CLINIC_EMAIL_MANUALLY		ON T.id = dbo.TW_V_CLINIC_EMAIL_MANUALLY		.pr_id
LEFT JOIN	dbo.TW_V_CLINIC_EMAIL			ON T.id = dbo.TW_V_CLINIC_EMAIL				.pr_id
LEFT JOIN	dbo.TW_V_CLINIC_ADDRESS_MANUALLY	ON T.id = dbo.TW_V_CLINIC_ADDRESS_MANUALLY		.pr_id
LEFT JOIN	dbo.TW_V_CLINIC_ADDRESS			ON T.id = dbo.TW_V_CLINIC_ADDRESS			.pr_id
LEFT JOIN	dbo.TW_V_NOMENCLATURE_TEXT		ON T.id = dbo.TW_V_NOMENCLATURE_TEXT			.pr_id
LEFT JOIN	dbo.TW_V_NOMENCLATURE_CODE		ON T.id = dbo.TW_V_NOMENCLATURE_CODE			.pr_id
LEFT JOIN	dbo.TW_V_OTHER_NCA_THIS_REPORT_WAS_SENT	ON T.id = dbo.TW_V_OTHER_NCA_THIS_REPORT_WAS_SENT	.pr_id
LEFT JOIN	dbo.TW_V_BUSINESS_UNIT_AFFECTED		ON T.id = dbo.TW_V_BUSINESS_UNIT_AFFECTED		.pr_id
LEFT JOIN	dbo.TW_V_MFR_PRELIM_ANALYSIS_DETAILS	ON T.id = dbo.TW_V_MFR_PRELIM_ANALYSIS_DETAILS		.pr_id
LEFT JOIN	dbo.TW_V_INVESTIGATION_COMMENTS		ON T.id = dbo.TW_V_INVESTIGATION_COMMENTS		.pr_id
LEFT JOIN	dbo.TW_V_RESULTS			ON T.id = dbo.TW_V_RESULTS				.pr_id
LEFT JOIN	dbo.TW_V_DATE_OF_EXPLANTATION		ON T.id = dbo.TW_V_DATE_OF_EXPLANTATION			.pr_id
LEFT JOIN	dbo.TW_V_DATE_OF_IMPLANTATION		ON T.id = dbo.TW_V_DATE_OF_IMPLANTATION			.pr_id
LEFT JOIN	dbo.TW_V_INITIAL_CORRECTIVE_ACTIONS	ON T.id = dbo.TW_V_INITIAL_CORRECTIVE_ACTIONS		.pr_id
LEFT JOIN	dbo.TW_V_MFR_PRELIMINARY_ANALYSIS_NOTES	ON T.id = dbo.TW_V_MFR_PRELIMINARY_ANALYSIS_NOTES	.pr_id
LEFT JOIN	dbo.TW_V_MFR_PRELIMINARY_ANALYSIS	ON T.id = dbo.TW_V_MFR_PRELIMINARY_ANALYSIS		.pr_id
LEFT JOIN	dbo.TW_V_TYPE_OF_REPORT_EMDV		ON T.id = dbo.TW_V_TYPE_OF_REPORT_EMDV			.pr_id
LEFT JOIN	dbo.TW_V_OTHERS				ON T.id = dbo.TW_V_OTHERS				.pr_id
LEFT JOIN	dbo.TW_V_IT				ON T.id = dbo.TW_V_IT					.pr_id
LEFT JOIN	dbo.TW_V_TR				ON T.id = dbo.TW_V_TR					.pr_id
LEFT JOIN	dbo.TW_V_ALL_EEA_CANDIDATE_SWISS	ON T.id = dbo.TW_V_ALL_EEA_CANDIDATE_SWISS		.pr_id
LEFT JOIN	dbo.TW_V_SK				ON T.id = dbo.TW_V_SK					.pr_id
LEFT JOIN	dbo.TW_V_SI				ON T.id = dbo.TW_V_SI					.pr_id
LEFT JOIN	dbo.TW_V_PL				ON T.id = dbo.TW_V_PL					.pr_id
LEFT JOIN	dbo.TW_V_SE				ON T.id = dbo.TW_V_SE					.pr_id
LEFT JOIN	dbo.TW_V_RO				ON T.id = dbo.TW_V_RO					.pr_id
LEFT JOIN	dbo.TW_V_PT				ON T.id = dbo.TW_V_PT					.pr_id
LEFT JOIN	dbo.TW_V_LV				ON T.id = dbo.TW_V_LV					.pr_id
LEFT JOIN	dbo.TW_V_NO				ON T.id = dbo.TW_V_NO					.pr_id
LEFT JOIN	dbo.TW_V_NL				ON T.id = dbo.TW_V_NL					.pr_id
LEFT JOIN	dbo.TW_V_MT				ON T.id = dbo.TW_V_MT					.pr_id
LEFT JOIN	dbo.TW_V_LI				ON T.id = dbo.TW_V_LI					.pr_id
LEFT JOIN	dbo.TW_V_LU				ON T.id = dbo.TW_V_LU					.pr_id
LEFT JOIN	dbo.TW_V_LT				ON T.id = dbo.TW_V_LT					.pr_id
LEFT JOIN	dbo.TW_V_HU				ON T.id = dbo.TW_V_HU					.pr_id
LEFT JOIN	dbo.TW_V_IS				ON T.id = dbo.TW_V_IS					.pr_id
LEFT JOIN	dbo.TW_V_HR				ON T.id = dbo.TW_V_HR					.pr_id
LEFT JOIN	dbo.TW_V_IE				ON T.id = dbo.TW_V_IE					.pr_id
LEFT JOIN	dbo.TW_V_FR				ON T.id = dbo.TW_V_FR					.pr_id
LEFT JOIN	dbo.TW_V_GR				ON T.id = dbo.TW_V_GR					.pr_id
LEFT JOIN	dbo.TW_V_FI				ON T.id = dbo.TW_V_FI					.pr_id
LEFT JOIN	dbo.TW_V_GB				ON T.id = dbo.TW_V_GB					.pr_id
LEFT JOIN	dbo.TW_V_DK				ON T.id = dbo.TW_V_DK					.pr_id
LEFT JOIN	dbo.TW_V_ES				ON T.id = dbo.TW_V_ES					.pr_id
LEFT JOIN	dbo.TW_V_DE				ON T.id = dbo.TW_V_DE					.pr_id
LEFT JOIN	dbo.TW_V_EE				ON T.id = dbo.TW_V_EE					.pr_id
LEFT JOIN	dbo.TW_V_CZ				ON T.id = dbo.TW_V_CZ					.pr_id
LEFT JOIN	dbo.TW_V_CY				ON T.id = dbo.TW_V_CY					.pr_id
LEFT JOIN	dbo.TW_V_CH				ON T.id = dbo.TW_V_CH					.pr_id
LEFT JOIN	dbo.TW_V_BG				ON T.id = dbo.TW_V_BG					.pr_id
LEFT JOIN	dbo.TW_V_BE				ON T.id = dbo.TW_V_BE					.pr_id
LEFT JOIN	dbo.TW_V_AT				ON T.id = dbo.TW_V_AT					.pr_id
LEFT JOIN	dbo.TW_V_SIMILAR_INCIDENTS_DETAILS	ON T.id = dbo.TW_V_SIMILAR_INCIDENTS_DETAILS		.pr_id
LEFT JOIN	dbo.TW_V_NO_OF_SIMILAR_INCIDENTS	ON T.id = dbo.TW_V_NO_OF_SIMILAR_INCIDENTS		.pr_id
LEFT JOIN	dbo.TW_V_KNOWN_SIMILAR_INCIDENTS	ON T.id = dbo.TW_V_KNOWN_SIMILAR_INCIDENTS		.pr_id
LEFT JOIN	dbo.TW_V_REMEDIAL_ACTION		ON T.id = dbo.TW_V_REMEDIAL_ACTION			.pr_id
LEFT JOIN	dbo.TW_V_CLINIC_COUNTRY_MANUALLY	ON T.id = dbo.TW_V_CLINIC_COUNTRY_MANUALLY		.pr_id
LEFT JOIN	dbo.TW_V_CLINIC_COUNTRY			ON T.id = dbo.TW_V_CLINIC_COUNTRY			.pr_id
LEFT JOIN	dbo.TW_V_CLINIC_CITY_MANUALLY		ON T.id = dbo.TW_V_CLINIC_CITY_MANUALLY			.pr_id
LEFT JOIN	dbo.TW_V_CLINIC_NAME_MANUALLY		ON T.id = dbo.TW_V_CLINIC_NAME_MANUALLY			.pr_id
LEFT JOIN	dbo.TW_V_CLINIC_CITY			ON T.id = dbo.TW_V_CLINIC_CITY				.pr_id
LEFT JOIN	dbo.TW_V_CONTACT_PERSON_WITHIN_FACILITY	ON T.id = dbo.TW_V_CONTACT_PERSON_WITHIN_FACILITY	.pr_id
LEFT JOIN	dbo.TW_V_CLINIC_NAME			ON T.id = dbo.TW_V_CLINIC_NAME				.pr_id
LEFT JOIN	dbo.TW_V_UNITS_AGE			ON T.id = dbo.TW_V_UNITS_AGE				.pr_id
LEFT JOIN	dbo.TW_V_UNITS_WEIGHT			ON T.id = dbo.TW_V_UNITS_WEIGHT				.pr_id
LEFT JOIN	dbo.TW_V_PATIENT_GENDER_MANUALLY	ON T.id = dbo.TW_V_PATIENT_GENDER_MANUALLY		.pr_id
LEFT JOIN	dbo.TW_V_WEIGHT				ON T.id = dbo.TW_V_WEIGHT				.pr_id
LEFT JOIN	dbo.TW_V_PATIENT_AGE_DURING_INCIDENT	ON T.id = dbo.TW_V_PATIENT_AGE_DURING_INCIDENT		.pr_id
LEFT JOIN	dbo.TW_V_REMEDIAL_ACTION_TAKEN		ON T.id = dbo.TW_V_REMEDIAL_ACTION_TAKEN		.pr_id
LEFT JOIN	dbo.TW_V_PATIENT_OUTCOME		ON T.id = dbo.TW_V_PATIENT_OUTCOME			.pr_id
LEFT JOIN	dbo.TW_V_OPERATOR_OF_THE_MEDICAL_DEVICE	ON T.id = dbo.TW_V_OPERATOR_OF_THE_MEDICAL_DEVICE	.pr_id
LEFT JOIN	dbo.TW_V_NUMBER_OF_MEDICAL_DEVICES	ON T.id = dbo.TW_V_NUMBER_OF_MEDICAL_DEVICES		.pr_id
LEFT JOIN	dbo.TW_V_DATE_AWARENESS			ON T.id = dbo.TW_V_DATE_AWARENESS			.pr_id
LEFT JOIN	dbo.TW_V_PRODUCT_CURRENT_LOCATION	ON T.id = dbo.TW_V_PRODUCT_CURRENT_LOCATION		.pr_id
LEFT JOIN	dbo.TW_V_USAGE_OF_THE_MEDICAL_DEVICE	ON T.id = dbo.TW_V_USAGE_OF_THE_MEDICAL_DEVICE		.pr_id
LEFT JOIN	dbo.TW_V_NUMBER_OF_PATIENTS_INVOLVED	ON T.id = dbo.TW_V_NUMBER_OF_PATIENTS_INVOLVED		.pr_id
LEFT JOIN	dbo.TW_V_REPORT_REFERENCE_NO		ON T.id = dbo.TW_V_REPORT_REFERENCE_NO			.pr_id
LEFT JOIN	dbo.TW_V_EVENT_DESCRIPTION		ON T.id = dbo.TW_V_EVENT_DESCRIPTION			.pr_id
LEFT JOIN	dbo.TW_V_DATE_OF_EVENT			ON T.id = dbo.TW_V_DATE_OF_EVENT			.pr_id
LEFT JOIN	dbo.TW_V_CATALOG_NUMBER			ON T.id = dbo.TW_V_CATALOG_NUMBER			.pr_id
LEFT JOIN	dbo.TW_V_NOTIFY_BODY_ID			ON T.id = dbo.TW_V_NOTIFY_BODY_ID			.pr_id
LEFT JOIN	dbo.TW_V_DATE_OF_EXPIRY			ON T.id = dbo.TW_V_DATE_OF_EXPIRY			.pr_id
LEFT JOIN	dbo.TW_V_MEDICAL_PRODUCT_TYPE		ON T.id = dbo.TW_V_MEDICAL_PRODUCT_TYPE			.pr_id
LEFT JOIN	dbo.TW_V_LOT_BATCH_NO_MANUALLY		ON T.id = dbo.TW_V_LOT_BATCH_NO_MANUALLY		.pr_id
LEFT JOIN	dbo.TW_V_NOMENCLATURE_SYSTEM		ON T.id = dbo.TW_V_NOMENCLATURE_SYSTEM			.pr_id
LEFT JOIN	dbo.TW_V_MODEL_NUMBER			ON T.id = dbo.TW_V_MODEL_NUMBER				.pr_id
LEFT JOIN	dbo.TW_V_DATE_MFR_DEVICE		ON T.id = dbo.TW_V_DATE_MFR_DEVICE			.pr_id
LEFT JOIN	dbo.TW_V_SOFTWARE_VERSION_NUMBER	ON T.id = dbo.TW_V_SOFTWARE_VERSION_NUMBER		.pr_id
LEFT JOIN	dbo.TW_V_DURATION_OF_IMPLANTATION	ON T.id = dbo.TW_V_DURATION_OF_IMPLANTATION		.pr_id
LEFT JOIN	dbo.TW_V_PRODUCT_TYPE			ON T.id = dbo.TW_V_PRODUCT_TYPE				.pr_id
LEFT JOIN	dbo.TW_V_MEDDEV_PRODUCT_CLASS		ON T.id = dbo.TW_V_MEDDEV_PRODUCT_CLASS			.pr_id
LEFT JOIN	dbo.TW_V_PRODUCT_SERIAL_NUMBER		ON T.id = dbo.TW_V_PRODUCT_SERIAL_NUMBER		.pr_id
LEFT JOIN	dbo.TW_V_STATUS_OF_SUBMITTER		ON T.id = dbo.TW_V_STATUS_OF_SUBMITTER			.pr_id
LEFT JOIN	dbo.TW_V_OTHER_STATUS			ON T.id = dbo.TW_V_OTHER_STATUS				.pr_id
LEFT JOIN	dbo.TW_V_CLASSIFICATION_OF_INCIDENT	ON T.id = dbo.TW_V_CLASSIFICATION_OF_INCIDENT		.pr_id
LEFT JOIN	dbo.TW_V_SERIOUS_PUBLIC_HEALTH_THREAT	ON T.id = dbo.TW_V_SERIOUS_PUBLIC_HEALTH_THREAT		.pr_id
LEFT JOIN	dbo.TW_V_REFERENCE_NUMBER_BY_NCA	ON T.id = dbo.TW_V_REFERENCE_NUMBER_BY_NCA		.pr_id
LEFT JOIN	dbo.TW_V_DATE_OF_THIS_REPORT		ON T.id = dbo.TW_V_DATE_OF_THIS_REPORT			.pr_id
LEFT JOIN	dbo.TW_V_REPORT_RECIPIENT		ON T.id = dbo.TW_V_REPORT_RECIPIENT			.pr_id
LEFT JOIN	dbo.TW_V_DATE_REPORT_SENT		ON T.id = dbo.TW_V_DATE_REPORT_SENT			.pr_id
LEFT JOIN	dbo.TW_V_SAFETY_OFFICER			ON T.id = dbo.TW_V_SAFETY_OFFICER			.pr_id
WHERE	P.name = N'eMDV'
AND	S.name IN (N'Pending Submission',N'Pending Safety Officer Approval')
А вообще за такой изврат, за то что мы его видели, вы уже нам должны.
По разу на каждую таблу.
Ну хотя бы адрес дадите того кто такое реализовал, за такое убивают весь род до 12-го калена.
3 дек 13, 18:50    [15234585]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
o-o
Guest
мда-с.
отдаю свое почетное призовое место по дурдому.
наши НЕораклоиды подобную хрень догадались разбить на кучку запросов по 10 табл на запрос.
т.е. 10 приджойнили, слили в #tmp, к ней еще 10 приджойнили, снова сохранили и т.д.

+
а давайте объявим конкурс на кто сумеет прочитать словами число из Estimated Number of Rows?
3 дек 13, 19:03    [15234666]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
Mnior,

Там и два последующие LEFT JOINа на просто JOIN надо менять - из-за условий в WHERE :)
3 дек 13, 19:06    [15234677]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
o-o
Guest
а вообще, судя по отсутствию алиасов и пунктуальному LEFT OUTER JOIN в 3 слова,
сие сгенерил какой-то построитель отчетов типа BO.
т.е. юзеры натаскали себе в отчет мышкой нужные "объекты" и им неведомо, что за всем этим стоит.
3 дек 13, 19:09    [15234692]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
o-o
Guest
iap,
я же говорю, это генератор отчетов.
сперва таскаются нужные поля, а оно тебе соединения генерит.
потом перетаскиваются (тоже мышкой) "фильтры".
а соединения при этом никто не будет переделывать
3 дек 13, 19:12    [15234709]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
PrettyMonstress
Member

Откуда:
Сообщений: 10
Этот запрос писала НЕ Я!
Меня попросили разобраться, почему он иногда работает 10 секунд, иногда 2 часа.
И, если что, предложить, как его переписать!
Я предположила, что это из-за параметра auto_uodate_statisticws=True, в то время, как асинхронный update=false.
Поэтому иногда статистика апдейтится прямо перед выполнением запроса.
Но на всякий случай я пообещала ещё и глянуть план выполнения и увидела эти 20%.
3 дек 13, 19:58    [15234922]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
o-o
Guest
PrettyMonstress,
спокойствие, только спокойствие.
для Вас же стараемся.

например, для БЕЗ ТОЛКУ прописывать хинты в запросе BO (Business Objects).
там есть галочка, чтобы самодеятельность внести в сгенеренное,
но она автоматом снимется при малейшем изменении в визуальной части.
я к тому и уточняю, что за продукт сие сгенерил, чего понапрасну стараться.

а-то вон еще мне один ораклоид с другого проекта доложил,
что у них тотальный запрет использования временных таблиц.
(это в ответ на мною для него переписанное через времянки.
хоть оно и в 10 раз убыстрилось, но вот против религии не попрешь)

может я неправильно подозреваю, но представленный код до ужаса напоминает мне то, что вокруг меня
3 дек 13, 20:12    [15235003]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
PrettyMonstress
Member

Откуда:
Сообщений: 10
Mnior
Это слишком мало чтобы сказать почему 2 часа.
Нужно было отловить план запроса того тормозного случая.

Мне дали голый запрос в тексте письма)))
Даже без разрешения запускать его на проде.
Просто рассказали, что с ним бывает)))
Он ещё из какой-то недоступной мне программы запускается, кстати)))

Mnior
Судя по скрину и если я не путаю местами строится хеш по полю dbo.Person_Relation.id и далее матчится основная табла (dbo.PR.originator_rel_id).
Т.к. dbo.PR.originator_rel_id не упорядочен, то поэтому и хеш.
Можно сделать принудительно:
а) упорядочить по originator_rel_id чтобы сработал быстрый MERGE
б) поставить принудительный LOOP для dbo.Person_Relation:


Хоть кто-то ответил по делу. Спасибо, попробую реализовать.
Упорядочить по originator_rel_id - это прям ORDER BY в запросе указать в конце?
3 дек 13, 20:15    [15235030]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37224
Я бы начал с выяснения, чего все таки ждет коннект, когда выполняется приведенное безобразие. Вариантов на поверхности два - или блокировки, или план. Дальше, в зависимости от симптомов и возможностей, можно выдумывать лечение.

В вот это вот - "по фотографии меня лечите, чо слабо?" - оставьте, не конструктивно, да и не проканает здесь.
3 дек 13, 20:16    [15235034]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
PrettyMonstress
Member

Откуда:
Сообщений: 10
o-o
PrettyMonstress,
спокойствие, только спокойствие.
для Вас же стараемся.

например, для БЕЗ ТОЛКУ прописывать хинты в запросе BO (Business Objects).
там есть галочка, чтобы самодеятельность внести в сгенеренное,
но она автоматом снимется при малейшем изменении в визуальной части.
я к тому и уточняю, что за продукт сие сгенерил, чего понапрасну стараться.

а-то вон еще мне один ораклоид с другого проекта доложил,
что у них тотальный запрет использования временных таблиц.
(это в ответ на мною для него переписанное через времянки.
хоть оно и в 10 раз убыстрилось, но вот против религии не попрешь)

может я неправильно подозреваю, но представленный код до ужаса напоминает мне то, что вокруг меня


Получила только что ответ на мой вопрос, где и когда они запускают этот запрос:
"Is a script called from Filemaker which contains exactly the query I attached
Is ran manually when needed"
3 дек 13, 20:17    [15235043]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31863
PrettyMonstress
Мне дали голый запрос в тексте письма)))
Даже без разрешения запускать его на проде.
Неконструктивно.

Пусть разбирается тот, у кого есть доступ, иначе не получится.
PrettyMonstress
Но мне не понятно, потому что я с мс скл не работала.
И разбираться должен специалист.

Итого: Пусть разбирается специалист, имеющий доступ к системе.
А то какой то цирк получается.
С тем же успехом можно послать этот запрос вложенным в пасхальные проднаборы для пенсионеров.
3 дек 13, 20:25    [15235088]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2407
мдя "Простой запрос" , да еще и "без разрешения запускать его "
что же будет, если пришлют "сложный"?
вроде и не пятница сегодня )
4 дек 13, 10:25    [15237325]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
PrettyMonstress,

Попросите их прислать сложный запрос, реально хочется увидеть это чудо.
4 дек 13, 11:09    [15237637]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
varelchik_f
Member

Откуда:
Сообщений: 9
Ты хинты поставила али нет?
4 дек 13, 12:39    [15238307]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
PrettyMonstress
Member

Откуда:
Сообщений: 10
varelchik_f
Ты хинты поставила али нет?

ну тут пока что не советовали хинты.
только "б) поставить принудительный LOOP для dbo.Person_Relation"
4 дек 13, 12:46    [15238373]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
PrettyMonstress
Member

Откуда:
Сообщений: 10
varelchik_f
Ты хинты поставила али нет?

ой, ты ж советовал nolock поставить... ну щас напишу им об этом :)
4 дек 13, 12:50    [15238409]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос, а работает долго  [new]
o-o
Guest
PrettyMonstress
Mnior
...
Можно сделать принудительно:
а) упорядочить по originator_rel_id чтобы сработал быстрый MERGE
б) поставить принудительный LOOP для dbo.Person_Relation:


Хоть кто-то ответил по делу. Спасибо, попробую реализовать.
Упорядочить по originator_rel_id - это прям ORDER BY в запросе указать в конце?


сомневаюсь, что в данном случае поможет.
не применительно к запросу, а в данной ситуации.
потому что по всем признакам super-puper BI tool detected.


все та же фигня, что у меня с предыдущим клиентом была.
(нас к разным засылают, но у всех подобная бурда, сейчас же в моде "BI руками тупого пользователя"):

те предыдущие построили репортистику BO поверх живого MS CRM,
а вопрос был, почему это днем отчеты невозможно запускать?
мало, что ждали опупительно, в конце милое окно сообщало, что запрос был выбран жертвой дедлока.
ну что, или на все таблицы вьюхи с (nolock), или в запрос ручками (nolock),
или, если хозяева репортистики вменяемые, предложить,
чтоб копию базы по ночам куда-то ресторили и поверх нее отчеты делали.

но еще раз: вот при малейшем чихе BO заново отчет генерит, благополучно сметая все хинты,
не знаю, что еще за FileMaker, но явно подобная же графическая генерилка отчетов.
и раз ее обозвали "недоступной", то тоже поди не дает сгенеренное просто так произвольным текстом заменять.
буржуи очень любят такие продукты использовать, т.к. нужен всего 1 спец по созданию слоя метаданных,
где делаются соединения с простановкой cardinality (потом и генерится всюду LEFT JOIN, ага),
поля таблиц раскладывают по папкам как доступные колонки для отчетов
+ объекты-фильтры, типа FILTER "PENDING" с кодом внутри: dbo.PR_Status_Type.name = N'Pending Submission'.
потом все отдается юзерам уровня мартышки и они таскают "объекты" в отчеты,
генерится монстр, все довольны.

потом начинается: вылечите мне по тексту запроса, и прав никаких не дают.
у меня впервые тут db_owner, только потому, что надо их г. в процедуры обвернуть,
а какая фиксированная роль позволит процедуры писать и запускать?
короче, не хватило db_datareader/db_datawriter, дали всем db_owner %)

+
кто там просил пример "сложного запроса"?
мне по старой памяти временами присылают такие простыни с просьбой ну хоть что-то сделать.
могу с желающими поделиться
у меня уже была идея организовать топик, куда подобные шедевры сливать,
а то мне вот и пожаловаться некому, вокруг одно вот это самое,
и всем это "нормально", меня просто не понимают, "что тут такого".

у нынешних слава богу MS-овский Reporting, не BO, там надо сами писать, не мышью таскать.
так ушлые юзеры генерят нужное Аксессом, потом в запрос копируют.
ВСЕ запросы с GROUP BY, но НИ ОДНОГО АГРЕГАТА в запросе нет.
угадайте, зачем оно такое?

все просто. почему-то их не научили генерить WHERE,
поэтому все фильтры попадают в HAVING,
и абсолютно все поля в GROUP BY.

все, отдавайте мне приз за максимальное кол-во увиденных шедевров за неполных 3 года.
4 дек 13, 12:51    [15238418]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить