![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
Лисеночек |
|
||||||||||||||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 12.11.2004 Репутация: нет Всего: нет |
Доброе время суток.
СУБД: MySQL 5.1.48. Сервер: Intel Xeon 2 Ghz, RAM 2 Gb, Centos. Есть такой запрос:
Он выполняется в течении 14 сек на localhost и где-то 17 сек на хосте. Скорость не зависит от того - есть LIMIT или нет. Скрипты таблиц (только поля, используемые в запросе, без PK и FK):
Индексы: object_n:
images:
phones:
Что выдает explain:
В таблице object_n 71748 записей, в phones - 182086, в images и object_n_site пока мало, но кол-во будет расти. Все таблицы кроме object_n, phones, images и object_n_site - справочники, и их объем не будет расти. Я пыталась записать запрос с использованием подзапроса:
Но в результате вообще ничего не выводится, и ошибки, ни пустого результата, вообще ничего, как-будто я не нажимала на кнопку "выполнить запрос". Заранее благодарна. Это сообщение отредактировал(а) Лисеночек - 11.10.2010, 13:35 |
||||||||||||||
|
|||||||||||||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: нет Всего: 329 |
||||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
нужен результат профайлера, чтобы найти проблематичные места и над этим запросом можно мозг покалечить в уме все прикидывая, можно какие нибудь тестовые данные прикрепить к теме?
|
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Гуру, я правильно прочитал план? я правильно понял что сканирование идет только по таблице о, остальные таблицы подтягиваются по индексу?
1) Попрбовать сделать "id_supertype=39"(убрать кавычки). Возможно индекс не используется потому что происходит неявное преобразование значения этого столбца в строку. тоже касается и is_deleted. 2) Если 1 не помогло(индекс все равно не испльзуется), принудить использовать индекс с помощью хинта. 3) Сколько записей из 71748 отбираются по этому критерию? Может быть имеет смысл сделать составной индекс по этим трем полям, правда, тогда, помимо того что убрать кавычки в '39'и '0', пожалуй надо будет "o.id_type<>0" заменить на "(o.id_type>0[ or o.id_type<0])" Это сообщение отредактировал(а) Zloxa - 11.10.2010, 14:23 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Лисеночек |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 12.11.2004 Репутация: нет Всего: нет |
||||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Это плохо. ![]() Для такой селективности приемущество использования индекса спорно. Ну а кавычки то поубирали? Чтонибудь изменилось? Индекс попробовали использовать? Как с ним? -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Лисеночек |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 12.11.2004 Репутация: нет Всего: нет |
Убрала кавычки, удалила индексы id_supertype и id_type и добавила составной индекс id_supertype, id_type, is_deleted. По времени не уменьшилось, explain теперь поменялся в первой строке:
Раньше было rows - 30539, теперь - 32283. |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
т.е. индекс использовать не удалось.
А намекали? Дропать индексы Вы малость поспешили. Для начала было бы правильнее добиться использования ранее существовавших индексов, имеющих наименьшу селективность. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Лисеночек |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 12.11.2004 Репутация: нет Всего: нет |
||||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Лисеночек, это надо не по плану узнавать а по содержимому таблиц. Тот индекс, отбор по которому позволяет выбрать меньше данных имеет наименьшую селективность и, соответственно, предпочтительней для использования при индексном доступе.
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Блин, я был не внимателен.
![]() Прошу прощения, если сбил с толку. блина, я тут чушь несу, а меня никто не поправил.... не дело же!!! ![]() Добавлено @ 09:41 еще как вариант, попытаться создать составной индекс по (id_supertype, id) чтобы попытаться избавиться от filesort. Однако я не уверен что удастся. я так понимаю селективность id_supertype наименьшая из перечисленных в where Это сообщение отредактировал(а) Zloxa - 12.10.2010, 09:43 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Лисеночек |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 12.11.2004 Репутация: нет Всего: нет |
Мне стыдно признаться, я ступила, когда создавала таблицу object_n_site забыла указать auto_increment на поле id. Я ее создавала последней и в ней пока была только 1 запись, поэтому ошибка и не выявлялась. Из-за этого, хоть в запросе использовался LIMIT, в плане было видно, что идет перебор всех 30539 записей.
В общем эта проблема - только моя вина. Теперь запрос выполняется 0,4 сек. Спасибо всем. |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |