mysql - 选择计数查询需要 2 分钟才能在 mysql 中得到计数结果
问题描述
我正在使用mysql
数据库,它的表名是license_csv
,并且它有18 million
记录,并且当我尝试计算记录时它正在使用MYISAM
引擎,而没有 where 条件它需要不到 1 秒的时间进行计数,但是当我应用 where 条件它需要2 min
计数结果时,我已经申请indexing
了那 2 列lic_state
,lic_city
但计数结果仍然需要 2 分钟,谁能帮我现在该查询需要做什么?在这里我还添加了我的查询,
SELECT COUNT(*) as total
from license_csv WHERE
lic_state like '%ca%' AND lic_city LIKE '%fresno%'
解决方案
您的查询的问题是您%
在字符串的两侧都使用了通配符。这会破坏现有索引。因为索引是顺序的,MySQL 不能在这种情况下使用它们,因为没有什么可以告诉他从哪里开始搜索。
可能的选项:
- 如果可能,切换到相等而不是
LIKE
; 然后你可以利用索引(lic_state, lic_sity)
- 否则,删除左侧的通配符 (
lic_state like 'ca%'
) 可能会有所帮助 - 切换到
FULL TEXT
搜索 - 将 CA 代码和城市列表存储在另一个表中(应该比 licenses 表小得多),并在 licenses 表中有一列引用其主键;然后
JOIN
在搜索那个表。使用此选项,应用搜索条件时要搜索的记录范围将小很多
推荐阅读
- apache-spark - Kubernetes 上的 Spark:Executor pod 默默地被杀死
- javascript - JS:用脚本填充输入时启动搜索
- python - 通过xmpp连接python到英雄联盟聊天
- background - 代号一后台操作
- python - AttributeError:模块“torch.utils”没有属性“tensorboard”
- python - 如何使用 OSMnx 从 OSM 格式的 XML 文件创建过滤图?
- javascript - 嵌入消息不显示在聊天中
- react-native - 在 React-Native 中为“未定义”显示错误的按钮
- javascript - 禁用自动填充到表单元素
- vb.net - 在 Vb.Net 中将唯一项添加到 ListView