sql - 替代查询“喜欢” 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”一词,是否有替代查询来查找该字段中的数据?
先感谢您
解决方案
您应该将比较移至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)
. 如果全文功能满足您的需求,那应该会加快查询速度。
推荐阅读
- django - 如何从Django中的另一个函数访问函数中的变量
- r - sjt.lmer 显示不正确的 p 值
- reporting-services - MDX:获取参差不齐的层次结构叶子的父级
- sql - Transact SQL - 需要计算的具有不同记录类型的表
- java - 使用 MVC 单击 html 中的文本时获取有关对象的更多信息
- python - 何时使用 Py_INCREF?
- java - java中如何满足参数类型Class
- react-native - React Native:在视图层次结构中移动组件
- c++ - 在 C++ 中为许多类设计持久性模型同时确保遵循 SOLID 的最佳方法是什么?
- css - 从组合框中选择一个选项时,整个 dov 向上移动。-CSS