【问题标题】:Optimize mysql query joining table优化mysql查询连接表
【发布时间】:2016-01-05 11:33:17
【问题描述】:

请建议如何优化以下查询并最小化查询加载..

$query = "选择 lot.arc_id,lot.arc_mod0_kod_daerah,lot.arc_mod0_kod_mukim,lot.arc_mod0_no_dhm,lot.arc_mod0_no_lot,lot.arc_mod0_jenis_lot,lot.arc_mod0_jenis_dhm,status.arc_mod0_status_pembayar, status.arc_mod0_kod_taraf_pemilik, user.arc_mod0_no_kp_baru,user.arc_mod0_no_kp_lama,user.arc_mod0_no_syarikat,user.arc_mod0_nama, cukai.arc_mod0_cukai_tanah, cukai.arc_mod0_cukai_taliaair,cukai.arc_mod0_denda,cukai.arc_mod0_notis6a,cukai.arc_mod0_tunggakan_dari,cukai.arc_mod0_tunggakan_hingga,cukai.arc_mod0_tunggakan_cukai_tanah,cukai.arc_mod0_tunggakan_taliaair, cukai.arc_mod0_tunggakan_denda,cukai.arc_mod0_tunggakan_notis6a, cukai.arc_mod0_hapusan, cukai.arc_mod0_remisyen, cukai.arc_mod0_remisyen_dari, cukai.arc_mod0_remisyen_hingga, cukai.arc_mod0_status_bayar 来自 frmmod0_lot_info 批次, frmmod0_pihatpen 状态,frmmod0_pihak_be 用户,frmmod0_cukai_in cukai 其中lot.arc_id=status.arc_mod0_lot_id AND status.arc_mod0_pihak_id=user.arc_id AND cukai.arc_mod0_lot_id=lot.arc_id 和 user.arc_mod0_no_syarikat='$company_no' AND status.arc_mod0_status_aktif='1' AND lot.arc_mod0_lotstatus = '1' AND (status.arc_mod0_kod_taraf_pemilik='01' 或 status.arc_mod0_kod_taraf_pemilik='02' 或 status.arc_mod0_kod_taraf_pemilik='05' 或
status.arc_mod0_kod_taraf_pemilik='06' 或 status.arc_mod0_kod_taraf_pemilik='10' 或 status.arc_mod0_kod_taraf_pemilik='12' 或 status.arc_mod0_kod_taraf_pemilik='13' 或 status.arc_mod0_kod_taraf_pemilik='14')";

【问题讨论】:

  • 这个问题最好在dba询问

标签: jquery mysql query-optimization loading minimization


【解决方案1】:

试试这个查询

  select * from frmmod0_lot_info lot left join frmmod0_pihatpen status on lot.arc_id=status.arc_mod0_lot_id
  left join frmmod0_pihak_be user on status.arc_mod0_pihak_id=user.arc_id
  left join frmmod0_cukai_in cukai on cukai.arc_mod0_lot_id=lot.arc_id
  where 
  user.arc_mod0_no_syarikat='$company_no' AND 
  status.arc_mod0_status_aktif='1' AND 
  lot.arc_mod0_lotstatus = '1' AND 
  (status.arc_mod0_kod_taraf_pemilik in ('02','05','06','10','12','13','14',))

【讨论】:

    【解决方案2】:

    你需要这些索引:

    user:   INDEX(arc_mod0_no_syarikat)
    status: INDEX(arc_mod0_status_aktif, arc_mod0_pihak_id, arc_mod0_kod_taraf_pemilik)
    lot:    INDEX(arc_mod0_lotstatus, arc_id)
    

    为你所拥有的做EXPLAIN SELECT ...;查看Rows 列。添加这些索引后重复。 Rows 列的乘积可能会急剧下降。

    More on creating optimal indexes.

    【讨论】:

      猜你喜欢
      • 2012-08-01
      • 2021-12-20
      • 2017-04-04
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 2015-07-22
      相关资源
      最近更新 更多