LEFT JOIN

时间:2017-01-21 14:37:22

标签: mysql

我正在将我的整个网站从MYSQLi转换为PDO。

现在我的一个较大的查询

有一个问题
SELECT
    kl.klant_id AS klant_id,
    kl.klant_naam AS klant_naam,
    kl.klant_adres AS klant_adres,
    kl.klant_postcode AS klant_postcode,
    kl.klant_plaats AS klant_plaats,
    kl.klant_land AS klant_land,
    kl.klant_telefoon AS klant_telefoon,
    kl.klant_fax AS klant_fax,
    kl.klant_email AS klant_email,
    kl.klant_contactpersoon AS klant_contactpersoon,
    gr.groep_id AS groep_id,
    gr.groep_naam AS groep_naam,
    IF(ft.factuur_isgroep>0,gr.groep_factuur_adress,ft.factuur_adres) AS factuur_adres,
    IF(ft.factuur_isgroep>0,gr.groep_factuur_postbus,ft.factuur_postbus) AS factuur_postbus,
    IF(ft.factuur_isgroep>0,gr.groep_factuur_postcode,ft.factuur_postcode) AS factuur_postcode,
    IF(ft.factuur_isgroep>0,gr.groep_factuur_plaats,ft.factuur_plaats) AS factuur_plaats,
    IF(ft.factuur_isgroep>0,gr.groep_factuur_land,ft.factuur_land) AS factuur_land,
    IF(ft.factuur_isgroep>0,gr.groep_factuur_iban,ft.factuur_iban) AS factuur_iban,
    IF(ft.factuur_isgroep>0,gr.groep_factuur_bic,ft.factuur_bic) AS factuur_bic,
    IF(ft.factuur_isgroep>0,gr.groep_factuur_telefoon,ft.factuur_telefoon) AS factuur_telefoon,
    IF(ft.factuur_isgroep>0,gr.groep_factuur_contactpersoon,ft.factuur_contactpersoon) AS factuur_contactpersoon,
    IF(ft.factuur_isgroep>0,gr.groep_factuur_bymail,ft.factuur_bymail) AS factuur_bymail,
    IF(ft.factuur_isgroep>0,gr.groep_factuur_email,ft.factuur_email) AS factuur_email,
    IF(ft.factuur_isgroep>0,gr.groep_extra,ft.factuur_opmerkingen) AS factuur_opmerkingen,
    al.alarm_ccs_type AS alarm_ccs,
    al.alarm_gprs AS alarm_gprs,
    al.alarm_gprs_provider AS alarm_gprs_provider,
    al.alarm_gprs_sn AS alarm_gprs_sn,
    al.alarm_doormelding AS alarm_doormelding,
    al.alarm_onderhoud AS alarm_onderhoud,
    al.alarm_onderhoud_laatst AS alarm_onderhoud_laatst,
    al.alarm_certificaat AS alarm_certificaat,
    al.alarm_cer_state AS alarm_cer_state,
    al.alarm_cer_uitgifte AS alarm_cer_uitgifte,
    al.alarm_risicoklasse AS alarm_risicoklasse,
    mk.pac_naam AS meldkamer_naam,
    mk.pac_clientnr AS meldkamer_clientnr,
    mk.pac_promnr AS meldkamer_promnr,
    mk.pac_backup_clientnr AS meldkamer_backup_clientnr,
    mk.pac_backup_promnr AS meldkamer_backup_promnr
FROM klanten AS kl
LEFT JOIN groepen AS gr ON kl.klant_groupid > 0 AND kl.klant_groupid = gr.groep_id
LEFT JOIN alarm AS al ON al.alarm_klantid = kl.klant_id
LEFT JOIN meldkamer AS mk ON mk.pac_klantid = kl.klant_id
LEFT JOIN factuur AS ft ON ft.factuur_klantid = kl.klant_id
ORDER BY klant_id ASC

查询有效,但在PDO上它很慢。 (+/- 3秒,而mysqli小于1秒)

这是PDO的已知问题还是我的查询有问题?

我已经阅读了很多其他有类似问题的人,但他们都有比这更复杂的查询。

解决了感谢cale_b。我的问题是索引我的列。我索引了上面查询中使用的所有列,现在它非常快。感谢。

0 个答案:

没有答案