Оптимизация моего mysql запрашивает для использования индекса для сортировки

Это самый простой способ:

string s = name + std::to_string(age);
7
задан wrygiel 15 July 2013 в 20:41
поделиться

4 ответа

Я считаю, что ваш запрос, вероятно, соответствует большому проценту данных в таблице. В подобных ситуациях оптимизатор MySQL часто выбирает сканирование таблицы и полностью игнорирует индексы, поскольку на самом деле это быстрее, чем выполнять дополнительные чтения всего индекса и использовать его для выбора данных. Итак, в этом случае я предполагаю, что public_private = 'yes' и authorized = 'yes' соответствует значительной части вашей таблицы. Следовательно, если MySQL пропускает использование индекса из-за этого, то он также недоступен для сортировки.

Если вы действительно хотите, чтобы он использовал индекс, то решением было бы использовать FORCE INDEX :

select * from videos FORCE INDEX (approved_2) where public_private='public' and approved='yes' order by number_of_views desc;

Однако я бы провел несколько тестов, чтобы убедиться, что вы re получение на самом деле быстрее, чем то, что выбрал оптимизатор MySQL. Очевидно, у оптимизатора действительно есть некоторые проблемы при выборе элементов для упорядочивания, так что вы определенно можете попробовать это и посмотреть, улучшится ли производительность.

13
ответ дан 7 December 2019 в 01:25
поделиться

добавьте отдельный индекс в столбец number_of_views и посмотрите, работает ли он тогда.

Если ключ представляет собой комбинацию из 3 столбцов, он будет использовать этот конкретный ключ только тогда, когда он использует все 3 для выполнения операции

-2
ответ дан 7 December 2019 в 01:25
поделиться

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

-2
ответ дан 7 December 2019 в 01:25
поделиться

Порядок имеет значение в составных ключах. Если вы хотите выполнить сортировку только по number_of_views с использованием ключа authorized_2 , измените:

KEY `approved_2` (`approved`,`public_private`,`number_of_views`)

на:

KEY `approved_2` (`number_of_views`,`approved`,`public_private`)

Составные ключи в MySQL работают слева направо. В приведенном выше примере ключ, объявленный с использованием number_of_views , Approved и public_private неявности, создает индексы для:

  • number_of_views
  • number_of_views , одобрено
  • number_of_views , одобрено , public_private
1
ответ дан 7 December 2019 в 01:25
поделиться
Другие вопросы по тегам:

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