![]() |
|
Модераторы: skyboy |
![]()
|
|
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: 1 Всего: 11 |
У меня в локальной копии БД 1`965`603 записей, такой запрос в среднем выполняется за 1 секунду. Рабочий комп - Pentium M 1.6, 1Gb. Сервер конечно мощнее, но и данных там больше. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Это говорит об отсутствии индекса. Или об использовании неправильного индекса. давай начнем с цитирования структуры таблицы, включая индексы, и explain-а вот этого распоследнего запроса. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 3 Всего: 32 |
возможно, может понадобиться составной индекс user_id, date_time
Если в консоли выполнить запрос EXPLAIN select * from _info where (user_id=2) order by date_time desc limit 1; - что выведет? |
|||
|
||||
| Coder |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: 1 Всего: 11 |
Akina,
выдает:
|
||||||
|
|||||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 3 Всего: 32 |
попробуй сделать
оно уберет filesort и должно стать быстрее. |
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: 1 Всего: 11 |
Feldmarschall, и правда! Теперь время выполнения такой выборки = 0.00. И колонка Extra показывает, что используется только where.
Мне только не понятно, почему не был создан индекс при создании базы данных? Я же явно указал - KEY (date_time). Или тут дело именно в составном индексе? Feldmarschall, +1 Это сообщение отредактировал(а) Coder - 3.6.2008, 02:37 |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
два индекса использоваться не могут, а у тебя ведь условие по одному и сортировка по другому. потому составной ключ решил проблему. а ещё, так как where выполняется до сортировки, то порядок следования полей в объявлении индекса должен быть именно таким. |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 3 Всего: 32 |
Coder, насколько я себе это представляю.
индекс - это файл, который, грубо говоря, состоит из пар "значение поля - позиция в файле", отсортированный по значению поля. Поиск по отсортированному списку происходит на порядки быстрее. В случае с одиночным индексом он используется, но помогает выбрать только строки одного юзера - а их 17 тысяч. А их уже приходится сортировать заново - ведь индекс по дате здесь не получится использовать - он тоже по всему файлу строится, и без информации о юзере. А составной индекс отсортирован по двум полям, то есть, имеет вид 1, 2001 1, 2002 1, 2003 2, 2001 2, 2005 5, 2008 соответственно, поиск сводится нахождению сначала юзера, а потом - максимальной даты для него. |
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: 1 Всего: 11 |
Feldmarschall, доходчиво.
Помечаю вопрос ка решенный. |
|||
|
||||
![]()
|
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |