За последние 24 часа нас посетили 18116 программистов и 1628 роботов. Сейчас ищут 1458 программистов ...

Запрос "накрывает" mysql. Что подправить?

Тема в разделе "MySQL", создана пользователем joost, 25 дек 2008.

  1. joost

    joost Guest

    [sql]select code_model from model where code_output=1 and code_type=3 and code_model not in (select distinct(code_model) from circle group by code_model having count(*)>=10 ) [/sql]

    select distinct(code_model) from circle group by code_model having count(*)>=10 результат выборки 4600 записей

    code_model not in (select distinct(code_model) from circle group by code_model having count(*)>=10 ) - делает нагрузку

    чем заменить? или как по другому составить запрос

    индекс на code_model в model и circle есть
     
  2. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    попробуй
    [sql]select m.code_model from model m
    left join (select distinct(code_model) from circle group by code_model having count(*)>=10 ) a
    ON m.code_model=a.code_model
    where code_output in(1,3) and a.code_model is null[/sql]

    но вообще такой запрос можно и во временную таблицу пихать.

    зы. поля лучше называть m_code_model и c_code_model
     
  3. joost

    joost Guest

    таже история
     
  4. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    версия мускула?
     
  5. joost

    joost Guest

    4.1.22
     
  6. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    мда, по вечерам я тоже туплю.
    [sql]select distinct(m.code_model) from model m
    left join circle c
    ON m.code_model=a.code_model
    where code_output in(1,3)
    group by m.code_model
    having count(a.id)<10 [/sql]

    вместо a.id подставишь что там у тебя.

    если все еще будет тормозить - надо будет собрать правильный составной индекс.
     
  7. joost

    joost Guest

    за идею спасибо!

    переделал запрос так
    [sql]
    select distinct(model.code_model) from circle, model left join circle ON model.code_model=circle.code_model
    where model.code_output=1 and model.code_type=3
    group by circle.code_model as id
    having count(id)<10 limit 1
    [/sql]

    работает, но логически не правильно

    реализовать надо
    [sql]and code_model not in (select distinct(code_model) from circle group by code_model having count(*)>=10 )[/sql]
    имено єта часть запроса тормозит
     
  8. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    joost
    1) перестань свинячить и пользуйся русской кодировкой. неприятно общаться.
    2) объясни разницу в логике. ))
     
  9. joost

    joost Guest

    а где свинство? только в кодировке?
     
  10. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow