【问题标题】:ALTERNATIVE QUERY "LIKE" MariaDB替代查询“喜欢” MariaDB
【发布时间】:2019-11-01 10:05:15
【问题描述】:

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

提前谢谢你

【问题讨论】:

  • 谷歌 mariadb 全文搜索
  • 一种可能的加速:LEFT JOIN --> JOIN.

标签: sql mariadb


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 2012-12-23
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多