Задавайте вопросы, мы ответим
Вы не зашли.
Здраствуйте.
Уже 2 дня бьюсь никак не могу поставить правильный индекс или изменить запрос.
Отредактированно Proger (17.03.2009 05:19:44)
Неактивен
`from` =617 OR `for` =617
Вот такую конструкцию в индекс не всунешь.
Здесь "или" мешает использовать левый префикс индекса, т.к. для проверки условия может использоваться либо `FROM` (тогда результат уже не зависит от `for` и он не используется), либо используется `for` (тогда не используется `FROM`), в любом случае получится дырка.
Здесь, наверно, самый оптимальный индекс: (`mid`, `date`)
Неактивен
Спасибо за ответ. Тогда добавлю просто ещё одно поле для индефикации. Ибо индекс (`mid`, `date`) не особо помог. Сделаю всё типа where `mid` = 100 AND `sid` = 105 чтобы не было OR. Спасибо не знал, что так нельзя, чтобы использывать преимущества индексов.
Неактивен
У Вас поле MID входит в два индекса, я бы рекомендовал оставить только один.
А для того, чтобы убрать filesort именно в Вашем запросе попробуйте убрать сортировку результата - сразу файлсорт уйдет. Поэтому, я бы создал индекс на поле `DATE` и использовал бы именно его в запросе:
Отредактированно Magz (18.03.2009 11:43:05)
Неактивен
А не надо вообще боятся этого filesort. Тем более, что
Proger написал:
...Благо пока запрос в среднем занимает несколько секунд
Как правильно было сказано
Magz написал:
...А для того, чтобы убрать filesort именно в Вашем запросе попробуйте убрать сортировку результата
В данном случае filesort - это обыкновенная сортировка, вызванная ORDER BY.
Прочитано здесь: http://www.mysqlperformanceblog.com/200 … -in-mysql/
Неактивен