АЛЬТЕРНАТИВНЫЙ ЗАПРОС "НРАВИТСЯ" MariaDB - PullRequest
0 голосов
/ 01 ноября 2019

Я использую MariaDB и сделал несколько запросов, чтобы найти некоторые данные в поле

Запрос:

SELECT
    COUNT(
        CASE WHEN alamat.alamat_prins LIKE '%Aceh%' THEN 1 END
    ) AS 'id-ac'
FROM
    kont_uji_rutin AS UjiRutin 
    LEFT JOIN alamat ON UjiRutin.id_prins = alamat.id_prins 
WHERE
    UjiRutin.tgl_tri BETWEEN '2019-01-01' AND '2019-12-31'

Использование запроса LIKE - самый медленный способ сопоставления полного текста наУ меня есть. Существуют ли альтернативные запросы для поиска данных в поле при условии, что в нем есть слово "Aceh"?

Заранее спасибо

1 Ответ

0 голосов
/ 01 ноября 2019

Вы должны переместить сравнение в предложение WHERE и отказаться от LEFT JOIN:

SELECT COUNT(*) as 'id_ac'
FROM kont_uji_rutin ur JOIN
     alamat a
     ON ur.id_prins = a.id_prins 
WHERE ur.tgl_tri BETWEEN '2019-01-01' AND '2019-12-31' AND
      a.alamat_prins LIKE '%Aceh%';

Это не окажет большого влияния на производительность. Стоит попробовать индексы на:

  • kont_uji_rutin(tgl_tri, id_prins)
  • alamat(id_prins, alamat_prins)

(они охватывают запрос, который может повысить производительность).

В конечном счете, проблема заключается в подстановочном знаке в начале шаблона. Это предотвращает использование индекса. Вы можете рассмотреть полнотекстовый индекс на alamat(alamat_prins). Это должно ускорить запрос, если полнотекстовая функциональность соответствует вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...