Как оптимизировать сложный запрос на нагруженной базе MYSQL?

123
L
На сайте с 10.02.2015
Offline
223
#11
FrancisDarroze #:

Task ( status, type, provider, cat )
TaskFlow (executor_acc_id, url_id )

составные индексы созданы по всем полям

Покажите CREATE TABLE

Может у вас неиспользуемые индексы

FD
На сайте с 12.05.2017
Offline
71
#12
livetv #:
Покажите EXPLAIN

id select_type table type possible_keys key key_len ref rows Extra

1 PRIMARY task ref stat_task,getlist,getlist_bot getlist_bot 6 const,const,const,const 8731 Using index condition; Using where

НАКРУТКА INSTAGRAM (https://instagram777.ru) - Смешные цены!
FD
На сайте с 12.05.2017
Offline
71
#13
livetv #:

1. Покажите EXPLAIN

2. Вот сейчас у себя написан запрос с NOT EXISTS и с LEFT JOIN

NOT EXISTS не использовал индексов, в то время как  LEFT JOIN использовал и в Extra числилось "Not exists"

Разницы не заметили между лефт джойн и not exist. Выбор на втором варианте так как данные из второй таблицы нам не нужны. Exlplain добавил в стартовый пост

FD
На сайте с 12.05.2017
Offline
71
#14
livetv #:

Покажите CREATE TABLE

Может у вас неиспользуемые индексы

Здравствуйте. Индексы использует

id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
1       PRIMARY task    ref     stat_task,getlist,getlist_bot   getlist_bot     6       const,const,const,const 8731    Using index condition; Using where
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
2       DEPENDENT SUBQUERY      flow    index_subquery  user_url_executor       user_url_executor       8       func,const      1       Using index; Using where
L
На сайте с 10.02.2015
Offline
223
#15
FrancisDarroze #:

Здравствуйте. Индексы использует

Я имел в виду, в таблице есть другие индексы, которые не используются другими запросами.

А ресурсы на их поддержание тратятся.

По EXPLAIN

Первая таблица - длина индекса - 6 байт. А индекс  Task по идее должен быть хотя бы 1+1+1+4 (если cat - 4 байта) = 7 байт.

Эти индексы не фигурируют:

Task ( status, type, provider, cat )
TaskFlow (executor_acc_id, url_id )

2 раза 

Using where

То есть InnoDB по индексу отдала данные, но mysql пришлось еще их дофильтровывать.

FD
На сайте с 12.05.2017
Offline
71
#16
livetv #:

Я имел в виду, в таблице есть другие индексы, которые не используются другими запросами.

А ресурсы на их поддержание тратятся.

в таск есть еще один индекс но он используется в другом скрипте

L
На сайте с 10.02.2015
Offline
223
#17
FrancisDarroze #:

Разницы не заметили между лефт джойн и not exist. Выбор на втором варианте так как данные из второй таблицы нам не нужны.

А Вы данные со второй таблицы и не запрашивайте, а добавьте в WHERE условие что-то вроде:

AND flow.id IS NULL
FrancisDarroze #:

в таск есть еще один индекс но он используется в другом скрипте

Вижу в  таск 3 индекса

FD
На сайте с 12.05.2017
Offline
71
#18
livetv #:

А Вы данные со второй таблицы и не запрашивайте, а добавьте в WHERE условие что-то вроде:

Вижу в  таск 3 индекса

да и они все используются

L
На сайте с 10.02.2015
Offline
223
#19

Покажите еще

SHOW CREATE TABLE Task

И

SHOW VARIABLES WHERE 
Variable_Name IN ('innodb_flush_method', 'innodb_flush_log_at_trx_commit', 'innodb_buffer_pool_size');
FD
На сайте с 12.05.2017
Offline
71
#20
livetv #:

А Вы данные со второй таблицы и не запрашивайте, а добавьте в WHERE условие что-то вроде:

Вижу в  таск 3 индекса

а какой смысл в лефт джойн? какой выйгрыш может быть? у нас раньше он итак стоял, сменили на NOT exitst

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий