首页 > 解决方案 > 替代查询“喜欢” MariaDB

问题描述

我正在使用 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”一词,是否有替代查询来查找该字段中的数据?

先感谢您

标签: sqlmariadb

解决方案


您应该将比较移至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). 如果全文功能满足您的需求,那应该会加快查询速度。


推荐阅读