【发布时间】:2012-02-20 19:50:16
【问题描述】:
表中有超过200万条记录。
我想统计表中有多少错误(已检查)以及已检查的错误数。
我做了两个查询:
SELECT count(*) as CountError FROM table WHERE checked = 1 AND error != ''
-
SELECT count(*) as Checked FROM table WHERE checked = 1
性能真的很慢,大约需要5分钟才能得到结果。如何改进?
我已经在status 字段上建立了更新性能的索引。
如果我在 checked 字段上建立索引 - 那么 UPDATE 性能将受到影响,这是我不希望的。
UPDATE 发生的次数比 SELECT 多。
桌子是Innob
【问题讨论】:
-
购买更多硬件。不,真的 - 你不能一劳永逸,所以如果你不愿意做出权衡,你需要改变问题的约束。使用
memcache,或者更快的机器,或者升级数据库软件... -
这是一个非常基本的查询。如果不索引
checked或error,您将无能为力。 @Borealid 好的,不过是购买更多硬件...... -
如果添加索引节省的资源大于添加索引的资源成本,则添加索引。通常,您会发现添加索引的好处多于成本。除非您可以量化没有整体节省,否则我通常会在添加所需内容方面犯错,而不是过度“担心”对更新的影响。
标签: mysql sql database indexing