Poster
Новичок
Оптимизация sql-запроса
Господа, плиз взгляните на запрос.
Поясню: один рейс может состоять из двух "саб-рейсов" (туда и обратно), может только из одного
id | abs_id | racenumber | остальные не показаны
-------------------------------
1.......1..........zxc119
2.......1..........zxc120
3.......2..........qwe90
4.......2..........qwe91
9......56.........vbn78
Пока рейсов было мало, достаточно быстро выбирались таким запросом:
И дальше рисуется таблица с выбранными данными.
засекаю время перед запросом
засекаю время после отрисовки таблицы.
4.106 s на 99 рейсов (таблица 198 строк)
В какую сторону двигаться чтобы уменьшить время?
Спасибо
Господа, плиз взгляните на запрос.
Поясню: один рейс может состоять из двух "саб-рейсов" (туда и обратно), может только из одного
id | abs_id | racenumber | остальные не показаны
-------------------------------
1.......1..........zxc119
2.......1..........zxc120
3.......2..........qwe90
4.......2..........qwe91
9......56.........vbn78
Пока рейсов было мало, достаточно быстро выбирались таким запросом:
PHP:
// цикл по абсолютному номеру abs_id
$sqla = "
SELECT r.abs_id AS abs_id, r.dateout_p AS dateout_p, r.timeout_p AS timeout_p,
r_c.customer_id AS customer_id, d.name AS dname, cus.name AS cusname FROM _races r
LEFT JOIN _races_customers_parameters r_c ON (r.abs_id = r_c.abs_id)
LEFT JOIN customers cus ON (r_c.customer_id = cus.name)
LEFT JOIN directions d ON (r.direction_to_p = d.id)
WHERE r.hide = 0
GROUP BY r.abs_id
ORDER BY $sort_by LIMIT $first, $per_page
";
$sql = mysql_query($sqla); echo '<br>'.mysql_error();
if (mysql_num_rows($sql)) { $cunter = 0;
while ($poabsid = mysql_fetch_array($sql)) { $cunter ++;
// цикл по id рейса
$sql2 = mysql_query("SELECT id, abs_id,racenumber,direction_from_p,direction_from_f,
TIME_FORMAT(timeout_p, '%H:%i') AS timeout_p,
TIME_FORMAT(timeout_f, '%H:%i') AS timeout_f,
DATE_FORMAT(dateout_p, '%d.%m.%y') AS dateout_p,
DATE_FORMAT(dateout_f, '%d.%m.%Y') AS dateout_f,
direction_to_p,direction_to_f,
TIME_FORMAT(timein_p, '%H:%i') AS timein_p,
TIME_FORMAT(timein_f, '%H:%i') AS timein_f,
typevs_p,typevs_f,typevs_c_p,typevs_y_p,
pax_c_p,pax_c_f,pax_y_p,pax_y_f,pax_inf_p,pax_inf_f,pax_total_p,pax_total_f,
booking_c,booking_y,booking_inf,booking_tot,refuel_ap_out,refuel_ap_in,slot_ap_out,slot_ap_in,
service_ap_out,service_ap_in,
paid_wr_ac, tickets_wr_cust, pax_from_cust, trans_pax_ac,
comment,changes FROM _races WHERE abs_id = '".$poabsid['abs_id']."' AND hide = 0 ORDER BY id");
if (mysql_num_rows($sql2)) {
while ($eachrase = mysql_fetch_array($sql2)) { ?>
засекаю время перед запросом
засекаю время после отрисовки таблицы.
4.106 s на 99 рейсов (таблица 198 строк)
В какую сторону двигаться чтобы уменьшить время?
Спасибо