我正在使用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”一词,是否有其他查询来查找字段中的数据?
先感谢您
您应该将比较移至该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)
。如果全文功能可以满足您的需求,则可以加快查询速度。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句