MySQL заказ по производительности - PullRequest
2 голосов
/ 10 января 2012

Я нахожу следующее немного озадачивающим ... если я выполняю следующие запросы, при сортировке по индексированному значению 'ключевое слово' это занимает 0,0008 секунд, но при сортировке по 'счетчику' это занимает более 3 секунд.

Следующее занимает около 0,0008 секунд:

SELECT keyword, COUNT(DISTINCT pmid) as count 
    FROM keywords 
    WHERE (collection_id = 13262022107433) 
    GROUP BY keyword 
    order by keyword desc limit 1;

Это займет более 3 секунд:

SELECT keyword, COUNT(DISTINCT pmid) as count 
    FROM keywords 
    WHERE (collection_id = 13262022107433) 
    GROUP BY keyword 
    order by count desc limit 1;

Есть ли способ ускорения сортировки набора результатов при сортировке по количеству? Должно ли это действительно занять больше времени? Есть ли альтернативы? Двигатель InnoDB.

Большое спасибо за ваш вклад!

Ответы [ 2 ]

2 голосов
/ 10 января 2012

Вы можете добавить дополнительный индекс, чтобы помочь на этапе подсчета.

ALTER TABLE keywords ADD INDEX ckp_index (collection_id,keyword,pmid);

Если у вас уже есть составной индекс только с collection_id и ключевым словом, Оптимизатор запросов по-прежнему будет включать поиск поля pmid из таблицы.

Добавление этого нового индекса приведет к удалению всех сканирований таблицы и выполнению только сканирования индекса.

Это ускорит подсчет (отличный pmid) части запроса.

Дай попробовать !!!

2 голосов
/ 10 января 2012

Не неожиданно, не избежать.Когда этот запрос упорядочен по keyword, MySQL может просто посмотреть, какое ключевое слово последним, выбрать строки с этим ключевым словом и сосчитать их.Однако, когда вы заказываете по count, он должен посчитать строки для каждого ключевого слова, чтобы определить, какое из них самое высокое.Это намного больше работы!

...