Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (3) 1 2 [3]  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> MySql составной индекс для запросов вида IN
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5497
Пользователь №: 35718
На форуме: 4 года, 19 дней
Карма: 167




Цитата (Serg86 @ 17.12.2015 - 12:06)
Как сказать запросу чтоб кеширование не использовал, чтобы реальную картину видеть?

пробел перед запросом


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
S.Chushkin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пофигист
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 783
Пользователь №: 36058
На форуме: 3 года, 11 месяцев, 12 дней
Карма: 40




Цитата (Serg86 @ 17.12.2015 - 10:21)
Да я всю таблицу не стал сливать просто, если надо солью больше

Для оптимизации размер важен.

Цитата
Будет миллион, будет больше, это логично.

Относительно - да. Но не линейно.

Цитата
Составныеиндексы не работают почемуто, судя по explain задействуется только cat. Вчера похимичил посидел, удалось задействовать status_cat, время значительно снизилось.

Работают, просто нужен правильный индекс.

Цитата
Подскажите, можно с этим както бороться?

Правильный индекс тчк

Т.к. Вы не предоставили реальный дамп, поговорим о сферическом коне.
Для Вашего конкретного запроса оптимальным будет индекс:
KEY `idx` (`status`,`raised`,`date_add`,`cat`,`region`,`id`)

Для ещё большей оптимальности поправьте ORDER BY в запросе:
ORDER by d.status desc, d.raised desc, d.date_add desc 


Теперь на 50К данных выборка первых 30 строк займёт порядка 0.005 сек.
Можно и дальше оптимизировать, но оптимальность запроса уже будет зависить от других параметров.


--------------------
PM
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
S.Chushkin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пофигист
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 783
Пользователь №: 36058
На форуме: 3 года, 11 месяцев, 12 дней
Карма: 40




Цитата (Serg86 @ 17.12.2015 - 10:25)
Через какоето время запускаю запрос снова и он выполняется за 15 секунд, тут же повторяю запрс и получаю 0,1 секунду, в чем прикол не пойму.

Это эффект чтения таблицы с диска в буфер. Повторное чтение - вероятно у Вас слишком маленький размер буфера (конкретно эти данные были вытеснены из него другими данными).
Все тесты надо проводить, когда все данные в буфере. Иначе Вы получите не скорость выполнения запроса, а скорость чтения с диска.


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Serg86  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 104
Пользователь №: 42253
На форуме: 11 месяцев, 25 дней
Карма:




Цитата
Это эффект чтения таблицы с диска в буфер. Повторное чтение - вероятно у Вас слишком маленький размер буфера (конкретно эти данные были вытеснены из него другими данными).
Все тесты надо проводить, когда все данные в буфере. Иначе Вы получите не скорость выполнения запроса, а скорость чтения с диска.

Не совсем понял, буфер MySql?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Serg86  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 104
Пользователь №: 42253
На форуме: 11 месяцев, 25 дней
Карма:




Цитата
Т.к. Вы не предоставили реальный дамп, поговорим о сферическом коне.
Для Вашего конкретного запроса оптимальным будет индекс:
KEY `idx` (`status`,`raised`,`date_add`,`cat`,`region`,`id`)

Для ещё большей оптимальности поправьте ORDER BY в запросе:
ORDER by d.status desc, d.raised desc, d.date_add desc


Щас попробую, отпишусь.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
S.Chushkin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пофигист
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 783
Пользователь №: 36058
На форуме: 3 года, 11 месяцев, 12 дней
Карма: 40




Цитата (Serg86 @ 17.12.2015 - 17:14)
Не совсем понял, буфер MySql?

Да


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Serg86  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 104
Пользователь №: 42253
На форуме: 11 месяцев, 25 дней
Карма:




Цитата

Цитата
Т.к. Вы не предоставили реальный дамп, поговорим о сферическом коне.
Для Вашего конкретного запроса оптимальным будет индекс:
KEY `idx` (`status`,`raised`,`date_add`,`cat`,`region`,`id`)

Для ещё большей оптимальности поправьте ORDER BY в запросе:
ORDER by d.status desc, d.raised desc, d.date_add desc
Щас попробую, отпишусь.

Не прокатило
explain говорит key_len 5, rows 85700
Я так понял что только статус задействован
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Serg86  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 104
Пользователь №: 42253
На форуме: 11 месяцев, 25 дней
Карма:




S.Chushkin Сможете в реальной базе глянуть? мож я че не так делаю, у меня ваших цифр и близко нет
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Serg86  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 104
Пользователь №: 42253
На форуме: 11 месяцев, 25 дней
Карма:




Цитата

Цитата (Serg86 @ 17.12.2015 - 12:06)
Как сказать запросу чтоб кеширование не использовал, чтобы реальную картину видеть?

пробел перед запросом

Не работает
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
S.Chushkin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пофигист
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 783
Пользователь №: 36058
На форуме: 3 года, 11 месяцев, 12 дней
Карма: 40




Цитата (Serg86 @ 17.12.2015 - 17:51)
S.Chushkin Сможете в реальной базе глянуть? мож я че не так делаю, у меня ваших цифр и близко нет

1)
Настройки движка плохие для Ваших объёмов.
У Вас БД больше гига, а некоторые настройки рассчитаны на 100М.
например:
innodb_log_buffer_size 268435456
оптимально - объём буфера должен быть >= объёму БД.

и остальные настройки посмотрите - я не стал вникать в подробности.

2) Отображение строк 0 - 29 (30 всего, Запрос занял 0.0133 сек.)
Всё нормально, индекс используется.

3)
Цитата
Не прокатило
explain говорит key_len 5, rows 85700
Я так понял что только статус задействован

Как я уже говорил, основные тормоза у Вас были на "filesort". При использовании IDX вся выборка происходит по индексу. Т.е. сначала выборка по `status`(индекс), затем выборка 30 строк в порядке `raised`,`date_add`(индекс) с фильтрацией по cat`,`region`, значения которых берутся из индекса.
Принципиально быстрее вряд ли получится, - к сожалению mySQL не настолько умный. Думаю, если повозиться хорошенько, то можно ещё ускорить раза в два. Скорее всего это будет максимум возможного при такой структуре БД для такого запроса. Повторюсь - запрос не простой для движка.


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (3) 1 2 [3]  Ответ в темуСоздание новой темыСоздание опроса