MySQL, читая этот оператор EXPLAIN

Вы должны ответить на веб-соединения с ответом. Если у вас есть статический HTML, index.html, например

<h1>Hello World</h1>

, вам нужно установить Firebase CLI Tools, а затем выполнить развертывание firebase, чтобы отправить этот файл .html на хостинг Firebase.

5
задан Mike 22 April 2013 в 21:35
поделиться

4 ответа

Я предполагаю, что Вы посмотрели здесь для получения большего количества информации о том, что она говорит Вам. Очевидно, ВСЕ средства его прохождение через всех них. О временном использовании и использовании filesort говорят на той странице. Вы могли бы хотеть посмотреть на это.

От страницы:

Используя filesort

MySQL должен сделать дополнительную передачу, чтобы узнать, как получить строки в отсортированном порядке. Вид сделан путем прохождения через всех строк согласно типу соединения и хранения ключа сортировки и указателя на строку для всех строк, которые соответствуют оператору Where. Ключи затем отсортированы, и строки получены в отсортированном порядке. Посмотрите Раздел 7.2.12, “Оптимизация ORDER BY”.

Используя временный файл

Для разрешения запроса MySQL должен составить временную таблицу для содержания результата. Это обычно происходит, если запрос содержит GROUP BY и пункты ORDER BY тот список столбцы по-другому.

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

3
ответ дан 14 December 2019 в 01:20
поделиться

Мой совет?

Повредите запрос в 2 и используйте временную таблицу в середине.

Reasonning

Проблема, кажется, что таблица c является таблицей, просканированной, и что это - последняя таблица в запросе. Это, вероятно, плохо: если у Вас есть сканирование таблицы, Вы хотите сделать это в начале запроса, таким образом, это только сделано однажды.

Я не гуру MySQL, но я потратил большой запросы оптимизации времени на другом DBS. Это смотрит на меня как оптимизатор, не решил, что это должно запуститься с c и работы назад.

Другая вещь, которая ударяет меня, состоит в том, что существует, вероятно, слишком много таблиц в соединении. Большинство оптимизаторов борется больше чем с 4 таблицами (потому что количество возможных заказов таблицы растет экспоненциально, таким образом проверение их всех становится непрактичным).
Наличие слишком многих таблиц в соединении является корнем 90% проблем производительности, которые я видел.

Дайте ему движение и сообщите нам, как Вы преуспеваете. Если это не помогает, отправьте SQL, определения таблицы и индексы, и я брошу другой взгляд.

Общие советы

Не стесняйтесь смотреть на этот ответ, который я дал на общих подсказках по производительности.

Большой ресурс

MySQL Documentation для ОБЪЯСНЯЕТ

3
ответ дан 14 December 2019 в 01:20
поделиться

Хорошо рассмотрение запроса было бы полезно, но существует по крайней мере одна вещь, которую это очевидно стоит изучить - заключительная строка показывает ВЕСЬ тип для той части запроса, который является обычно не большим видеть. Если предложенный возможный ключ (userfield) имеет смысл как добавленный индекс к таблице c, могло бы стоить добавить его и видеть, уменьшает ли это строки, возвращенные для той таблицы в поиске.

2
ответ дан 14 December 2019 в 01:20
поделиться

План запросов

План запросов мы могли бы надеяться, что оптимизатор выберет, был бы чем-то как:

  • запустите с sessions где partner_id=1 , возможно с помощью индекса на partner_id,
  • соединение sessions кому: users, использование индекса на user_id
  • соединение sessions кому: phones, где status=1, использование индекса на session_id и возможно status
  • соединение sessions кому: phones снова с помощью индекса на session_id и phone_id **
  • соединение phones кому: cdr использование индекса на userfield
  • соединение sessions кому: email_aliases, где status=1 использование индекса на session_id и возможно status
  • соединение sessions кому: email_aliases снова с помощью индекса на session_id и email_id **
  • соединение email_aliases кому: email_headers использование индекса на email_id

** путем помещения 2 полей в эти индексы мы позволяем оптимизатору соединить с использованием таблицы session_id, и сразу узнайте связанное phone_id или email_id не имея необходимость читать базовую таблицу. Эта техника сохраняет нас чтение и может сэкономить много времени.

Indeces я создал бы:

Вышеупомянутый план запросов предлагает эти индексы:

fa_sessions ( partner_id, session_id )  
fa_users ( user_id )  
fa_email_aliases ( session_id, email_id )  
fa_email_headers ( email_id )  
fa_email_aliases ( session_id, status )  
fa_phones ( session_id, status, phone_id ) 
cdr ( userfield ) 

Примечания

  • Вы почти наверняка получите приемлемую производительность, не создавая все их.
  • Если какая-либо из таблиц является маленькой (меньше чем 100 строк) затем, вероятно, не стоит создать индекс.
  • fa_email_aliases мог бы работать с ( session_id, status, email_id )В зависимости от того, как работает оптимизатор.
1
ответ дан 14 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: