Если добавление индексов является опцией, добавьте один для id
(в зависимости от того, из какой таблицы), поскольку он используется для ORDER
. См. http://www.mysqlperformanceblog.com/2006/09/01/order-by-limit-performance-optimization/ У меня возникли проблемы с большими таблицами с 30 секунд до 3 секунд, добавив индекс в пункт ORDER
.
Также рекомендуется, чтобы столбец ORDER
происходил от ведущего стола. Поэтому, если id
из таблицы posts
, то это уже верно, но если нет, отмените таблицы в запросе, выбрав FROM followings
и JOIN posts
.
И, наконец, если id_user, id_me
- это многоколоночный индекс, может быть полезно изменить его на два отдельных индекса, так как он не использует индекс в предложении WHERE
. В качестве индекса с несколькими столбцами, считая, что id
, который вы ищете, встречается редко, ему все равно придется сканировать большую часть таблицы, чтобы найти запрошенный вами limit
. Как упоминалось другими, изменение порядка многоколоночного индекса на id_me,id_user
помогло бы, потому что предложение WHERE
сужает результаты вниз по самым быстрым (также принимая id
, которые вы ищете редко), но я не знаю, все равно воспользуются частью id_user
для соединения, хотя это будет иметь меньший эффект.
Запустите 'EXPLAIN' и опубликуйте его. –
правило большого пальца: любое поле, используемое в 'join' или' where', а иногда и 'order by' должно иметь индекс на нем. но кроме этого, в вашем запросе очень мало, что можно оптимизировать на уровне запросов - либо добавлять индексы по мере необходимости, либо получать более быстрый сервер БД. –
, который является порядком по идентификатору «ID». Вы должны привыкнуть к запросам с помощью table.column ... или alias.column, поскольку другие пытаются помочь определить правильный контекст происхождения таблицы. – DRapp