MySQL 慢查询 'COUNT'

标签 mysql sql innodb sql-tuning

以下查询在 2.5Ghz 双核 Windows Server 2008 R2 Enterprise 上运行 4.5Gb MySql 数据库时需要 0.7 秒。 sIndex10 是一个 varchar(1024) 列类型:

SELECT COUNT(*) FROM e_entity
WHERE meta_oid=336799 AND sIndex10 = ''

EXPLAIN 显示以下信息:

id: 1
select_type: SIMPLE
table: e_entity
type: ref
possible_keys: App_Parent,sIndex10
key: App_Parent
key_len: 4
ref: const
rows: 270066
extra: Using Where

有 230060 行与第一个条件匹配,124216 行与带有 AND 运算符的子句匹配。 meta_oid 已编入索引,虽然 sIndex10 也已编入索引,但我认为没有将此索引作为 FORCE INDEX (sIndex10) 选择是正确的,需要更长的时间. 我们查看了诸如 innodb_buffer_pool_size 之类的配置参数,它们看起来也是正确的。

鉴于此表已经有642532条记录,我们是否达到了mysql所能提供的性能的顶部?目前投资硬件是唯一的出路吗?

最佳答案

WHERE meta_oid=336799 AND sIndex10 = ''

求一个复合索引

INDEX(meta_oid, sIndex10)  -- in either order

这与在列上有单独的索引不同

仅此而已。

Index Cookbook

关于MySQL 慢查询 'COUNT',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40715325/

相关文章:

mysql - Rails form_用于设置选项和设置所选选项

java - UPDATE 表的语法错误

基于最后检索的记录的 SQL 分页

mysql - pid 文件参数在 my.cnf 中被忽略

mysql - 假设多对多关系,如何计算每个组的用户数?

php - PDO INSERT准备好的语句,没有错误,但未插入数据

mysql - 在 Hibernate 中查询

mysql - MySQL/InnoDB 内部如何表示 NULL 值?

mysql - 我可以在 MySQL/InnoDB 中关闭事务吗?

mysql - 表大小看起来更大,但是当我下载数据库时,表大小似乎更小,这背后的原因是什么?