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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка по ключу 
:(
    Опции темы
sergejzr
Дата 24.7.2007, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Чего -то я не врубаюсь..

Есть таблица, в ней индекс на поле day(date)

Если пишу так:
Код

EXPLAIN SELECT m.day FROM m_checks m ORDER BY m.day 


База использует индекс и всё пучком.
Но на такое:
Код

EXPLAIN SELECT status ,m.day,m.time FROM m_checks m ORDER BY m.day 


говорит "Using filesort".

Как мне ему обьяснить, что всё уже и так просортировано?

В конечном варианте проблема выглядит след. образом,

выборка:
Код

SELECT status,time FROM m_checks ORDER BY day DESC, time DESC;

Надо чтобы данный запрос использовал ключ... Как лучше сделать ключ и заставить БД делать то, что нам надо?



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
SelenIT
Дата 24.7.2007, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 6
Всего: 401



sergejzr, может, есть смысл заменить индекс по day на составной индекс по day + time?


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
sergejzr
Дата 24.7.2007, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Пробовал, даже дополнительно по (status,day,time)... не помогает


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
SelenIT
Дата 24.7.2007, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 6
Всего: 401



AFAIK, status в тот же индекс включать точно не нужно, особенно на первом месте... при приведенной выборке он, по идее, вообще использоваться не сможет. sergejzr, а where в запросе вообще нет, выбираются все строки?



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
sergejzr
Дата 24.7.2007, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



неа, where нет. Просто отсортировать надо..

Вот я в принципе тоже думаю, что статус не нужен. Это я просто уже всё подряд пробую...


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
sTa1kEr
Дата 24.7.2007, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


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

Репутация: 7
Всего: 146



sergejzr, а что выдает такой запрос?
Код

EXPLAIN SELECT * FROM m_checks m ORDER BY m.day  

PM MAIL   Вверх
sergejzr
Дата 24.7.2007, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Цитата(sTa1kEr @  24.7.2007,  22:24 Найти цитируемый пост)
sergejzr, а что выдает такой запрос?

filesort...

Вот ссылка для тестов smile
вход: 

логин: root
без пароля.

http://pma.cihar.com/STABLE/sql.php?db=tab...l.php&pos=0


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
sTa1kEr
Дата 25.7.2007, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


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

Репутация: 7
Всего: 146



Видимо сортировка по индексу работает только в том случае, когда идет выборка тех же полей того же самого индекса.
Цитата

The index can also be used even if the ORDER BY does not match the index exactly, as long as all of the unused portions of the index and all the extra ORDER BY columns are constants in the WHERE clause. The following queries use the index to resolve the ORDER BY part: 

Как я понял, именно про это и идет речь, хотя в примерах явно используется *.

Добавлено @ 00:49
Немного странно, конечно, но сейчас протестировав, у меня не получилось отсортировать по индексу с выборкой не индексированых или использующих другой индекс полей...

Это сообщение отредактировал(а) sTa1kEr - 25.7.2007, 00:49
PM MAIL   Вверх
SelenIT
Дата 25.7.2007, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 6
Всего: 401



sergejzr, а зачем у поля time тип mediumtext?

В общем, поэкспериментировал... если полю time задать тип TIME (что, имхо, логично;), то запрос
Код
SELECT `status`, `day`, `time` FROM m_checks ORDER BY `day` DESC, `time` DESC
работает с составным индексом (day, time, status), что подтверждает вывод
Цитата(sTa1kEr @  25.7.2007,  00:46 Найти цитируемый пост)
Видимо сортировка по индексу работает только в том случае, когда идет выборка тех же полей того же самого индекса


Но ни с MEDIUMTEXT, ни с VARCHAR ничего так и не получилось. Пробовал менять длину индекса (напр., делать его короче данных или в точности равным длине данных), делал по нескольку раз optimize table - ноль эффекта... отправляюсь на поиски истины...



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
sergejzr
Дата 25.7.2007, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Цитата(SelenIT @  24.7.2007,  23:56 Найти цитируемый пост)
sergejzr, а зачем у поля time тип mediumtext?

Честно сказать, даже не знаю где искать того, кто эту таблицу 5 лет назад создал, чтобы спросить smile)))

Спасибо за расследование! Наверное именно так и надо будет сделать. Просто мне при каждом изменении таблицы надо весь код на 1000*N строк просматривать, чтобы не дай бог чего не сломалось. Система досталась "в наследство"...


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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