![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
DCoder |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 1.3.2006 Где: Самара Репутация: нет Всего: нет |
Доброго времени суток!
У меня имеется 2 таблицы: элементы и значения свойств этих элементов.
Хочу отсортировать по полю присоединённой таблицы:
Задумывается очень-очень крепко... Вот, что говорит explain:
Подскажите пожалуйста, как оптимизировать? |
||||||
|
|||||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
DCoder |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 1.3.2006 Где: Самара Репутация: нет Всего: нет |
Akina,
Пробовал - 51 сек. ![]()
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
А если в поддающихся сравнению единицах? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
DCoder |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 1.3.2006 Где: Самара Репутация: нет Всего: нет |
||||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Не эквивалентно же!!! Попробуйте составной индекс по properties (property_id,value) И если он сам не поймет в какой последовательности правильно джойнить - попробуйте определить порядок соединения непосредственно в запросе. /*к сожалению я не знаю как подсказать масиному оптимизаторов, что последовательность жойнов следует выдержать именно в порядке, определенном запросом*/
Это сообщение отредактировал(а) Zloxa - 5.9.2010, 13:16 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Да как обычно - расставить скобки. угу, есть такое -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Я это к тому, что Оракля, к примеру, чхал на скобки, для него хинтовать приходится, чтоб он этого не делал ;) А как дела в масе обстаят, ей богу не знаю. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
DCoder |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 1.3.2006 Где: Самара Репутация: нет Всего: нет |
Zloxa, 14.31255 сек.
EXPLAIN:
Если я не ошибаюсь, то сортировать, используя индекс, он не будет, потому что поле value имеет тип TEXT. Как-нибудь можно избавиться от filesort? А нескромный вопрос... Почему не эквивалентно? Это сообщение отредактировал(а) DCoder - 5.9.2010, 16:17 |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
К сожалению я так и не научился читать масин эксплайн. Индекс какой используется - ind_prop_pid_value? Похоже - да. потому что критерии отбора перенесены в критерии объединения. Запрос, переписанный Akina вернет ВСЕ элементы, а Ваш только те, для которых определены свойства.
тут не знаю. Весьма вероятно. пусть знающие подскажут. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
DCoder |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 1.3.2006 Где: Самара Репутация: нет Всего: нет |
Заменил тип данных поля value с TEXT на varchar(255) - время выполнения скрипта 0.19693 сек.
EXPLAIN:
Но! Стоит увеличить длину varchar(500), как индекс уже не используется, и возвращается filesort. Кто-нибудь может внести ясность? |
|||
|
||||
Zloxa |
|
||||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
не связано ли это с ограничением длины строки, хранимой в индексе?
тут. Если индекс хранит не строку целиком, а лишь ее префикс, индекс не может быть использован для сортировки. ЗЫ И, конечно, я проглядел что у Вас value имеет тип TEXT. Для меня наличие необходимости сортировки по значению поля этого типа - разрыв шаблона. Быть может стоит подумать о суррогатном поле, которое хранило бы префикс строки, заполнялось бы из триггера, было бы проиндексировано и использовалось бы для сортировки? Это сообщение отредактировал(а) Zloxa - 6.9.2010, 11:19 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
||||
|
|||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
а что, кстати означает text(10)?
1) что поле вмещает лишь 10 символов 2) что в таблице хранятся первые 10 символов, а остальные хранятся гдето с боку -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Ни то, ни другое. Это означает, что следует использовать наименьший из типов семейства TEXT, который вмещает указанное количество символов. В данном случае это будет TINYTEXT, макс. длина которого 255 символов. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
DCoder |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 1.3.2006 Где: Самара Репутация: нет Всего: нет |
Zloxa,
Akina, Извиняюсь за долгое отсутствие! Структура немного изменилась, и я думал, что уже вроде всё заработало, но тут у меня возник вообще ступор ![]() Может сегодня я уже заработался или звёзды не так сошлись... Создаю уже такой дубовый пример:
Вот что заявляет мне explain:
Возможных ключей нет, и ключ не используется!!! Как это понимать? Я уже несколько часов с ним воюю... Если подставить FORCE INDEX (ind_int_field1), то он его будет использовать, но если попробовать к этой таблице присоединить какую-нибудь другую, то даже FORCE INDEX ему не указ. |
||||
|
|||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |