SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.04.2011 17:36:17

PalamarJura
Участник
Зарегистрирован: 03.04.2011
Сообщений: 3

Долго работает выборка (join)!

(в таблицах firm_tovar (1 млн.) , firms (10 тис.))

Выполняю запрос:

SELECT t.`id`, t.`text`
FROM `firm_tovar` t
JOIN `firms` f ON (t.`id_firm`=f.`id`)
JOIN `firm_obl_ids` o ON (o.`firm_id`=f.`id` AND o.`obl_id`=9)
JOIN `country` c ON (t.`id_country`=c.`id`)
WHERE t.`id_`=733 LIMIT 1000,5;

очень долго (порядка 2 сек.)
EXPLAIN :


id    select_type    table    type    possible_keys    key    key_len    ref    rows    Extra
1,0    SIMPLE    t    ref    FK_firm_tovar-id_firm,firm_tovar-id_-id_firm-id_country    firm_tovar-id_-id_firm-id_country    2    const    32832,0    Using index
1,0    SIMPLE    f    eq_ref    PRIMARY    PRIMARY    4    building_ua_com.t.id_firm    1,0    Using index
1,0    SIMPLE    o    eq_ref    firm_obl_ids-firm_id-obl_id    firm_obl_ids-firm_id-obl_id    5    building_ua_com.t.id_firm,const    1,0    Using index
1,0    SIMPLE    c    eq_ref    PRIMARY    PRIMARY    1    building_ua_com.t.id_country    1,0    Using where; Using index

SELECT t.`id`
FROM `firm_tovar` t
JOIN `firms` f ON (t.`id_firm`=f.`id`)
JOIN `firm_obl_ids` o ON (o.`firm_id`=f.`id` AND o.`obl_id`=9)
JOIN `country` c ON (t.`id_country`=c.`id`)
WHERE t.`id_`=733 LIMIT 1000,5;

очень бистро (0.002 сек.). Получяю список id (590859, 590871, 591410, 591430, 592246)
дальше запрос

SELECT t.`id`, t.`text`
FROM `firm_tovar` t
JOIN `firms` f ON (t.`id_firm`=f.`id`)
JOIN `firm_obl_ids` o ON (o.`firm_id`=f.`id` AND o.`obl_id`=9)
JOIN `country` c ON (t.`id_country`=c.`id`)
WHERE t.`id` in (590859, 590871, 591410, 591430, 592246);
очень бистро (0.002 сек.).

Почему тормозит так сильно когда к полям добавляю поле  t.`text`? Помогите пожалуйста?

Неактивен

 

#2 08.04.2011 21:00:27

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Долго работает выборка (join)!

EXPLAIN осмысленный. Видимо, t.text — это широкая колонка, которую Вы
просто долго выбираете (LIMIT 1000 всё-таки).

Неактивен

 

#3 10.04.2011 11:52:15

PalamarJura
Участник
Зарегистрирован: 03.04.2011
Сообщений: 3

Re: Долго работает выборка (join)!

Да так и есть! А както мождна ето избежать?

Неактивен

 

#4 11.04.2011 00:36:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Долго работает выборка (join)!

Я вижу два выхода — не выбирать эту колонку или не использовать LIMIT 1000.
Последнее — в любом случае какой-то страшный зверь.

Неактивен

 

#5 11.04.2011 09:34:22

PalamarJura
Участник
Зарегистрирован: 03.04.2011
Сообщений: 3

Re: Долго работает выборка (join)!

ну колонка нужна точно, а лимит ето я так поставил, для теста! На сайте есть листаловка по страничках и вот емоно на последних страничках и будет большой LIMIT (например 1000, 20)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson