首页 > 解决方案 > 选择计数查询需要 2 分钟才能在 mysql 中得到计数结果

问题描述

我正在使用mysql数据库,它的表名是license_csv,并且它有18 million记录,并且当我尝试计算记录时它正在使用MYISAM引擎,而没有 where 条件它需要不到 1 秒的时间进行计数,但是当我应用 where 条件它需要2 min计数结果时,我已经申请indexing了那 2 列lic_statelic_city但计数结果仍然需要 2 分钟,谁能帮我现在该查询需要做什么?在这里我还添加了我的查询,

SELECT COUNT(*) as total 
from license_csv WHERE 
lic_state like '%ca%' AND lic_city LIKE '%fresno%'

标签: mysqlsqldatabase

解决方案


您的查询的问题是您%在字符串的两侧都使用了通配符。这会破坏现有索引。因为索引是顺序的,MySQL 不能在这种情况下使用它们,因为没有什么可以告诉他从哪里开始搜索。

可能的选项:

  • 如果可能,切换到相等而不是LIKE; 然后你可以利用索引(lic_state, lic_sity)
  • 否则,删除左侧的通配符 ( lic_state like 'ca%') 可能会有所帮助
  • 切换到FULL TEXT搜索
  • 将 CA 代码和城市列表存储在另一个表中(应该比 licenses 表小得多),并在 licenses 表中有一列引用其主键;然后JOIN在搜索那个表。使用此选项,应用搜索条件时要搜索的记录范围将小很多

推荐阅读