2016-07-14 1 views
0

У меня есть таблица, имеющая 2 строки Lakh (200K). Когда я выполняю запрос, он занимает слишком много времени (около 2 минут).Если данные меньше заданного предела, слишком много времени занимает

Это мой вопрос: -

SELECT a,b,c,d,@row:="tag1" as tag 
    FROM tableName 
WHERE tagName like "%helloworld|%" 
ORDER BY viewCount desc 
    LIMIT 20; 

helloworld| произошло только в 2 ряда.

Я хочу изменить запрос, если данные присутствуют более чем в 20 раз, он должен возвращать 20 строк еще в любых существующих строках.

Как оптимизировать этот запрос?

+1

Выполняет полное сканирование таблицы. Попробуйте найти полный текст вместо –

+1

Вам нужно создать отдельную таблицу с тегами, чтобы иметь возможность фильтрации без полноэкранного режима. –

+1

Попробуйте использовать полный текст в столбце 'tagName' вместе с' MATCH AGAINST', т. Е .: 'WHERE MATCH (tagName) AGAINST ('helloworld |' IN BOOLEAN MODE)' – mitkosoft

ответ

0

Вы не можете ускорить это, как указано.

Предложение WHERE с LIKE требует сканирования всех строк. Это O (N), где N = # строк в таблице. Он будет работать медленнее по мере увеличения размера стола.

Вы можете сделать запрос более быстрым, если вы можете найти способ разбора этой строки в токенах, которые вы можете ВСТАВИТЬ как столбцы и индексы.

-1

Попробуйте эти

  1. Установить индекс на вашем поле поиска вашего стола & проверьте время выполнения запроса
  2. не уверен, что количества просмотров здесь, но я предполагаю, что вы получаете это с подзапрос пытается удалить заявление заказа & затем проверить время выполнения запроса
Смежные вопросы