2015-04-12 9 views
-2
   SELECT o.ofc_id, o.ofc_joiningrank,o.ofc_gender, ofc_mobile,o.ofc_name,o.ofc_dateofbirth,o.ofc_officercode, 
        o.ofc_joiningrank, (

       SELECT CONCAT(w.wng_name, ', ', d.dst_name) FROM tbl_posts p 
        LEFT JOIN tbl_district_unit d ON (p.pos_dst_id = d.dst_id) 
        LEFT JOIN tbl_wings w   ON (p.pos_wng_id = w.wng_id) 
        LEFT JOIN tbl_cadre c   ON (p.pos_cdr_id = c.cdr_id) 
        LEFT JOIN tbl_grades g  ON (p.pos_grd_id = g.grd_id) 
        WHERE p.pos_id = a.apt_pos_id) as posting, 

      r.rnk_abbreviation,r.rnk_grade,r.rnk_name, 
        g.grd_name, t.ptp_name,d.dst_name AS post_district, w.wng_name, c.cdr_name, 
        p.pos_sortid, p.pos_status, p.pos_id,p.pos_parent_id, 
      a.apt_id, a.apt_name, a.apt_startdate,a.apt_ptp_id,a.apt_pos_id, a.apt_enddate ,p.post_name, 
      tbr.rgn_name,edu.edu_degree, 
      (select dst_name from tbl_district_unit where dst_id = o.ofc_district) as homedistrict, 
       (select grd_name from tbl_grades where grd_id = p.pos_grd_id) as postgrade, 
      (select rnk_name from tbl_ranks where o.ofc_joiningrank = rnk_id) as joiningrank 
      FROM tbl_posts p 
      LEFT JOIN tbl_appointments    a ON (a.apt_pos_id = p.pos_id) 
      LEFT JOIN tbl_officer    o ON (a.apt_ofc_id = o.ofc_id) 
      LEFT JOIN tbl_district_unit   d ON (p.pos_dst_id = d.dst_id) 
      LEFT JOIN tbl_regions    tbr ON (tbr.rgn_id = d.dst_rgn_id) 
      LEFT JOIN tbl_wings     w ON (p.pos_wng_id = w.wng_id) 
      LEFT JOIN tbl_cadre     c ON (p.pos_cdr_id = c.cdr_id) 
      LEFT JOIN tbl_ranks     r ON (a.apt_rnk_id = r.rnk_id) 
      LEFT JOIN tbl_education      edu ON (edu.edu_ofc_id = o.ofc_id) 
      LEFT JOIN tbl_grades    g ON (a.apt_grd_id = g.grd_id) 
      LEFT JOIN tbl_postingtype   t ON (a.apt_ptp_id = t.ptp_id) 
      WHERE tbr.rgn_id = ('" . $regionID . "') 
      order by p.pos_sortid ASC"); 

Этот запрос занимает слишком много времени, так как я выполняю этот запрос в цикле примерно для 20 регионов. Поэтому для каждой области этот запрос выполняется. Индексы уже размещены. Как оптимизировать любое решение?Запрос занимает слишком много времени. Требуется помощь

+0

магии восемь мячей говорят: результат маловероятен. magic eight ball также говорит, что добавить всю схему таблицы, план объяснения запроса и индексы из каждой таблицы в запросе. –

+0

@pala_ в основном правильный. Это сложный запрос. Трудно понять, насколько это оптимально, если вы не знаете, что * много больше о ваших данных - сколько строк в таблицах, индексах, планах выполнения и т. Д. Читайте http://use-the-index-luke.com/ Попробуйте удалить предложение WHERE ... rgn_id', упорядочивание 'rgn_id' и выполнение запроса только один раз. –

ответ

0

Удалите лишние вещи из запроса. Это поможет сократить время выполнения запроса: Здесь обновляется запрос. Пожалуйста, проверьте и дайте мне знать, если это поможет.

S @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ NI

SELECT o.ofc_id, o.ofc_joiningrank,o.ofc_gender,ofc_mobile,o.ofc_name,o.ofc_dateofbirth,o.ofc_officercode, r.rnk_abbreviation,r.rnk_grade,r.rnk_name, g.grd_name, t.ptp_name, d.dst_name AS post_district, w.wng_name, c.cdr_name, 
    p.pos_sortid, p.pos_status, p.pos_id,p.pos_parent_id,a.apt_id, a.apt_name, a.apt_startdate,a.apt_ptp_id,a.apt_pos_id, a.apt_enddate ,p.post_name, tbr.rgn_name, edu.edu_degree, 
    (select dst_name from tbl_district_unit where dst_id = o.ofc_district) as homedistrict, 
    (select grd_name from tbl_grades where grd_id = p.pos_grd_id) as postgrade, 
    (select rnk_name from tbl_ranks where o.ofc_joiningrank = rnk_id) as joiningrank 
     FROM tbl_posts p 
     LEFT JOIN tbl_appointments    a ON (a.apt_pos_id = p.pos_id) 
     LEFT JOIN tbl_officer    o ON (a.apt_ofc_id = o.ofc_id) 
     LEFT JOIN tbl_district_unit   d ON (p.pos_dst_id = d.dst_id) 
     LEFT JOIN tbl_regions    tbr ON (tbr.rgn_id = d.dst_rgn_id) 
     LEFT JOIN tbl_wings     w ON (p.pos_wng_id = w.wng_id) 
     LEFT JOIN tbl_cadre     c ON (p.pos_cdr_id = c.cdr_id) 
     LEFT JOIN tbl_ranks     r ON (a.apt_rnk_id = r.rnk_id) 
     LEFT JOIN tbl_education      edu ON (edu.edu_ofc_id = o.ofc_id) 
     LEFT JOIN tbl_grades    g ON (a.apt_grd_id = g.grd_id) 
     LEFT JOIN tbl_postingtype   t ON (a.apt_ptp_id = t.ptp_id) 
     WHERE tbr.rgn_id = ('" . $regionID . "') 
     order by p.pos_sortid ASC"); 

S @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ NI

Смежные вопросы