Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не получается придумать индекс для таблицы, 100% нагрузка из-за просмотра всей таб. 
:(
    Опции темы
Akina
Дата 15.12.2010, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



В порядке бреда
Код

FROM rates as r 
LEFT JOIN users as u 
ON (r.auction_id=439) AND (u.id=r.user_id)


Добавлено @ 14:35
Или уж совсем
Код

FROM
(
  select rates.*
  from rates 
  where rates.auction_id=439 
) as r
LEFT JOIN users as u 
ON u.id=r.user_id





--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
baldina
Дата 15.12.2010, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



shevak, покажи explain select
PM MAIL   Вверх
shevak
Дата 15.12.2010, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.8.2008

Репутация: нет
Всего: 1



Да, сделал, и индекс по нему поставил. А так же индек по полям auction_id - status - sum. Он помогает на других запросах. а на этом - нет

Добавлено через 2 минуты и 36 секунд
Explain
Код

id    select_type    table    type    possible_keys    key    key_len    ref    rows    Extra
1    SIMPLE    r    ref    auction_id,auction_id_2    auction_id    4    const    39957    Using where; Using filesort
1    SIMPLE    u    eq_ref    PRIMARY    PRIMARY    4    r.user_id    1     


Добавлено через 5 минут и 17 секунд
Akina, ни тот ни другой запрос не помог
PM MAIL   Вверх
Akina
Дата 16.12.2010, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(shevak @  15.12.2010,  19:40 Найти цитируемый пост)
ни тот ни другой запрос не помог

Ожидалось, в принципе...
Попробуй пойти дальше, и вынести в последнем варианте подзапрос в статический вьюв.
А заодно посмотри, сколько записей он выбирает. Может, мы зря копья ломаем?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
shevak
Дата 16.12.2010, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.8.2008

Репутация: нет
Всего: 1



Это не то. auction_id=439 выбирает все строки правильно и их сортирует. Потому и получатся 39957 строк. Но если б можно было поставить для ключа auction_id, status, sum нужную сортировку, то ситуация б улучшилась. Возможно ли такое в мускул? мне надо чтоб сортировал auction_id, status. sum DESC

Добавлено через 5 минут и 53 секунды
Сейчас к примеру если я убираю сортировку DESC  - все работает четко и быстро.

Добавлено через 12 минут и 11 секунд
Когда ставлю DESC - появляется Using filesort а число строк и там и там одинаковое
PM MAIL   Вверх
Akina
Дата 16.12.2010, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Слушай, а поясни-ка ты мне великую мысль...
С одной стороны, мы выбираем записи, для которых строго auction_id=439. С другой стороны, сначала сортируем именно по auction_id. 
Вопрос - нахрена?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
shevak
Дата 16.12.2010, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.8.2008

Репутация: нет
Всего: 1



Вот сам запрос
Код

SELECT r.*, u.id as u_id, u.city, u.nikname 
FROM rates as r 
LEFT JOIN users as u ON u.id=r.user_id 
WHERE r.auction_id=439 ORDER BY status,sum DESC,r.id LIMIT 0,25


Никакой сортировки по auction_id нет. Это для того чтоб ключ был эффективным я добавляю в него auction_id

Добавлено через 6 минут и 37 секунд
Думал сделать что-то типа такого
Код

ALTER TABLE `rates` ADD INDEX ( `auction_id` , `status` , `sum` DESC, `id` )


Но не помогло, наверное синтаксис неправильных, хотя отработал нормально
PM MAIL   Вверх
Akina
Дата 16.12.2010, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(shevak @  16.12.2010,  12:50 Найти цитируемый пост)
для того чтоб ключ был эффективным я добавляю в него auction_id 

и называешь его auction_id_2? а он не используется - см. explain... попробуй указать явно его использование в запросе - может, получится уйти от filesort...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
shevak
Дата 16.12.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.8.2008

Репутация: нет
Всего: 1



Код

SELECT SQL_NO_CACHE r.*, u.id as u_id, u.city, u.nikname 
FROM rates as r 
LEFT JOIN users as u ON u.id=r.user_id 
WHERE r.auction_id=439 ORDER BY status,sum,r.id LIMIT 0,25


Код

id    select_type    table    type    possible_keys    key    key_len    ref    rows    Extra
1    SIMPLE    r    ref    auction_id,auction_id_3    auction_id_3    4    const    39941    Using where
1    SIMPLE    u    eq_ref    PRIMARY    PRIMARY    4    test.r.user_id    1     


индекс auction_id_3 - это с полем id. Время выполнения запроса - 0.0006 sec

Код

SELECT SQL_NO_CACHE r.*, u.id as u_id, u.city, u.nikname 
FROM rates as r 
LEFT JOIN users as u ON u.id=r.user_id 
WHERE r.auction_id=439 ORDER BY status,sum DESC,r.id LIMIT 0,25


Код

id    select_type    table    type    possible_keys    key    key_len    ref    rows    Extra
1    SIMPLE    r    ref    auction_id,auction_id_3    auction_id    4    const    39941    Using where; Using filesort
1    SIMPLE    u    eq_ref    PRIMARY    PRIMARY    4    test.r.user_id    1     


Время выполнения запроса 0.0507 sec

Код

SELECT SQL_NO_CACHE r.*, u.id as u_id, u.city, u.nikname 
FROM rates as r USE INDEX (auction_id_3)
LEFT JOIN users as u ON u.id=r.user_id 
WHERE r.auction_id=439 ORDER BY status,sum DESC,r.id LIMIT 0,25


Код

id    select_type    table    type    possible_keys    key    key_len    ref    rows    Extra
1    SIMPLE    r    ref    auction_id_3    auction_id_3    4    const    42441    Using where; Using filesort
1    SIMPLE    u    eq_ref    PRIMARY    PRIMARY    4    test.r.user_id    1     

Время выполнения запроса 0.0613 sec

А чем я и говорю, мешает параметр DESC, только как его в формирование индекса в ставить
PM MAIL   Вверх
Akina
Дата 16.12.2010, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(shevak @  16.12.2010,  13:19 Найти цитируемый пост)
мешает параметр DESC, только как его в формирование индекса в ставить 

Ну при указании индекса можно указать ASC/DESC - только на текущей версии оно игнорируется и строится всегда в ASC. Это даже в документации описано.
Однако если эта операция действительно критична, могу предложить пойти по пути увеличения таблицы. Ввести в неё ещё одно поле (скажем назвать его sum2)? и писАть в него (0-sum). Включить именно его в индекс, и именно этот индекс использовать при сортировке.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
shevak
Дата 16.12.2010, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.8.2008

Репутация: нет
Всего: 1



Akina, у меня версия 5.0, случайно не знаешь в 5.1. исправили это проблему? или хотя бы в 5.5
PM MAIL   Вверх
Akina
Дата 16.12.2010, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(MySQL 6.0 Reference Manual)

An index_col_name specification can end with ASC or DESC. These keywords are allowed for future extensions for specifying ascending or descending index value storage. Currently, they are parsed but ignored; index values are always stored in ascending order. 




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
shevak
Дата 17.12.2010, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.8.2008

Репутация: нет
Всего: 1



Спасибо. Пока наверное это лучший вариант. Пришлось создать доп. индекс, вставка занимает больше времени чем я планировал, но в целом результат неплохой. Скорость запроса увеличилась в разы.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1056 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.