![]() |
|
Модераторы: skyboy |
![]()
|
|
| seeruyy |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 13.12.2011 Репутация: нет Всего: нет |
Всем доброго времени суток. Нужна помощь по оптимизации sql запроса и таблиц. Имеются вот такие таблицы:
По этим таблицам ведется поиск пользователей на сайте, сейчас в таблицах profile_..., user_... по 100000 записей Вот один из возможных запросов поиска, время выполнения его от 1.1774, и это на локалке с одним подключением к mysql, если лимит установлен с нуля, то все хорошо, 0.0012, а чем дальше в лес, тем больше дров (. Даже не знаю что с этим всем делать,
Если кто может чем-то помочь, буду благодарен. |
||||
|
|||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
1) Explain в студию.
2) Какова суммарная селективность отборов условий во WHERE по таблице qpv_profile_search ? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| seeruyy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 13.12.2011 Репутация: нет Всего: нет |
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE ps ref profile_id,user_id,ind1 ind1 5 const,const 13398 Using where; Using filesort 1 SIMPLE ui ref city_id,user_id user_id 4 smilemur.ps.user_id 1 1 SIMPLE c eq_ref PRIMARY,country_id PRIMARY 4 smilemur.ui.city_id 1 Using where 1 SIMPLE u eq_ref PRIMARY PRIMARY 4 smilemur.ps.user_id 1 1 SIMPLE co eq_ref PRIMARY PRIMARY 4 smilemur.c.country_id 1 1 SIMPLE pi ref profile_id profile_id 4 smilemur.ps.profile_id 1 1 SIMPLE p eq_ref PRIMARY PRIMARY 4 smilemur.ps.profile_id 1 Using index |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
А так?
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| seeruyy |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 13.12.2011 Репутация: нет Всего: нет |
Запрос выполняется в среднем за 2,2... секунды, проблема в том, что таблица которая формируется в WHERE ps имеет больше 6000 записей, и mysql перебирает ее всю до 5700 значения и лишь потом берет нужные 25 и дает результат, так же получалось и в предыдущем запросе, судя из данных EXPLAIN я так понял с индексами и их использованием все ок, запрос обрабатывается быстро, но вот как заставить работать так же быстро с большими цифрами в LIMIT ? Нашел один вариант решения, но он не универсален, суть в том что бы добавлять в WHERE последнее значение поля по которому сортировался предыдущий запрос (WHERE ps.profile_id > 1233). Для классической постраничной навигации это не подходит Только что немного поменял запрос на:
Время выполнения с 2.2 до 0,1235, вопрос в том можно ли Это считать нормальным результатом? Это сообщение отредактировал(а) seeruyy - 15.12.2011, 12:43 |
||||||
|
|||||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Думаю, да... но только хочу сообщить, что этот запрос совершенно неэквивалентен предыдущему. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| seeruyy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 13.12.2011 Репутация: нет Всего: нет |
Akina,
Большое Спасибо, Вы очень помогли |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |