【发布时间】:2016-11-21 08:01:18
【问题描述】:
在 4.5Gb MySql 数据库上运行时,以下查询在 2.5Ghz 双核 Windows Server 2008 R2 Enterprise 上需要 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 可以提供的性能的顶峰?现在投资硬件是不是唯一的出路?
【问题讨论】:
-
你有 'possible_keys: App_Parent,sIndex10' 你没有 meta_oid 吗? .你在这个列上有正确的索引吗?最终显示您的表架构
-
App_Parent是meta_oid列的索引名称 -
如果 app_parent 覆盖 BOTH 列,则可能会获得少量性能提升
标签: mysql sql innodb sql-tuning