За последние 24 часа нас посетили 53584 программиста и 1765 роботов. Сейчас ищут 1465 программистов ...

Оптимизация запросов и таблиц!

Тема в разделе "MySQL", создана пользователем ky3mu4u, 20 мар 2012.

  1. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    Добрый день!
    Хочу оптимизировать таблицы и запросы к Б/Д
    К примеру вот один из моих запросов:
    Код (Text):
    1. SELECT DISTINCT u.id, u.name, u.username, u.block, DATE_FORMAT(u.lastvisitDate, '%d.%m.%Y') as lastvisitDate, DATE_FORMAT(u.registerDate, '%d.%m.%Y') as registerDate, scu.status, scu.tel1_ser, scu.tel2_ser, scu.name_ser, scu.email_ser, scu.status2, scu.user_id, scu.expects, scu.dog_send, scu.upload, scu.params, scu.nomoney, scu.drzap, scu.dopinfoinf2, scu.dogovorno, scu.dogovordata, scu.summwork, scu.summroad, scu.newor, r.statu, rep.status as statusr, rep.st_rep_sum, rep.st_rep_road, scu.predupr, newo.newo, newoz.newo as newoz, opi.pstatus
    2. FROM jos_users as u
    3. LEFT JOIN jos_scusers as scu ON(scu.user_id = u.id)
    4. LEFT JOIN jos_screport as r ON(r.statu = 1 and r.user_id = u.id)
    5. LEFT JOIN jos_screport as rep ON(((rep.st_rep_road = 0 || rep.st_rep_sum = 0) and rep.status = 1) and rep.user_id = u.id)
    6. LEFT JOIN (SELECT o.user_id, o.newo FROM jos_scorders as o where o.newo = 1) as newo ON(newo.user_id = u.id)
    7. LEFT JOIN (SELECT oz.user_id, oz.newo FROM jos_scorders as oz where oz.newo = 3) as newoz ON(newoz.user_id = u.id)
    8. LEFT JOIN (SELECT op.id_serv, op.pstatus FROM jos_scorder_prize as op where op.pstatus = 1) as opi ON(opi.id_serv = u.id)
    9. GROUP BY u.id
    10. ORDER BY scu.newor DESC, newo.newo = 1 DESC, opi.pstatus = 1 DESC, r.statu = 1 DESC, newoz.newo = 3 DESC, (rep.status = 1 and rep.st_rep_sum = 0) DESC, (rep.status = 1 and (rep.st_rep_road = 0 || rep.st_rep_road = 1)) DESC, u.id DESC
    Также отправлял query такого типа OPTIMIZE TABLE tbl_name в ответе вроде пишет что все ок, а заходишь в таблицу он даже по индексам сортировку не сделал((
    Хочу понять как можно оптимизировать такой запрос как мой, и понять как делают оптимизацию таблиц с помощью query запросов к базе.
    Спасибо))

    Добавлено спустя 16 минут 27 секунд:
    чуть не забыл, этот запрос выполняется за 0.25-0.50 секунд, и выводит 300 строк
     
  2. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    Нашел один из вариантов сортировки таблиц!
    Если кому интересно, у меня тип таблицы был MyISAM и прописаны primary key, поменял тип таблицы на InnoDB теперь по ключам само все сортируется в базе как надо! тоесть раньше по умолчанию был к примеру такой порядок к примеру: user_id 4,5,234,33,35,543 и так далее после смены типа таблицы на InnoDB с примари кей по user_id он по умолчанию выводит так 4,5,33,35,234,543 то есть как надо, еще думаю попробовать отключить в запросе ORDER BY user_id DESC поскольку по умолчанию в таблице уже все отсаритровано, ведь на сортировку при запросе тоже уходит время!
    Ищу дальше способы оптимизации, кто может помочь в этом пишите!