【发布时间】:2011-09-21 23:27:05
【问题描述】:
所以,我有一个包含 4000 万个条目的庞大数据库。
查询很简单(a_view 是一个视图!)
select * from a_view where id > x LIMIT 10000
这是我得到的行为:如果 x 是一个小数字 (int),则查询速度非常快。 当 x > 29 百万时,查询开始需要几分钟。如果接近 3000 万,则需要数小时。等等……
这是为什么呢?我该怎么做才能避免这种情况?
我使用 InnoDB 作为引擎,表有索引。
限制值是一个关键值,它会影响性能。如果它很小,查询总是很快。但是如果 x 接近 30Millions,那么我需要非常小心地设置它不要太大(小于 300 百),它仍然很慢,但不会永远持续
如果您需要更多详细信息,请随时询问。
编辑:这里是解释
+----+-------------+--------+--------+------------- ----+---------+---------+---------+--- ------+--------------+ |编号 |选择类型 |表|类型 |可能的键 |关键 | key_len |参考 |行 |额外 | +----+-------------+--------+--------+------------- ----+---------+---------+----------+--- ------+--------------+ | 1 |简单 |啊|索引 |初级 |初级 | 39 |空 | 3028439 |使用索引 | | 1 |简单 |一个 | eq_ref |初级 |初级 | 4 | odb.aH.albumID | 1 |使用位置 | | 1 |简单 |超高压 |参考 | PRIMARY,专辑ID |专辑ID | 4 | odb.a.albumID | 4 | | | 1 |简单 |吨 | eq_ref |初级 |初级 | 4 | odb.aHT.id | 1 |使用位置 | | 1 |简单 |克 | eq_ref |初级 |初级 | 4 | odb.t.genre | 1 | | | 1 |简单 |阿尔 | eq_ref |初级 |初级 | 4 | odb.t.艺术家 | 1 | | +----+-------------+--------+--------+------------- ----+---------+---------+---------+--- ------+--------------+【问题讨论】:
-
你确定id列被索引了吗?
-
什么是表/视图,什么是索引?
-
理论上,如果你在“id”上有索引,性能应该差别不大。
-
是的,id 列在它来自的表上被索引,视图是创建连接多个表,所有表都被索引。 @Michael 你说的差别不大是什么意思?我认为我的确实很大
-
我们需要定义 a_view 来确定问题所在。
标签: mysql performance limit