【发布时间】:2013-12-18 13:36:27
【问题描述】:
我正在测试 InfiniDB 社区版,看看它是否适合我们的需要。 我在一个表中导入了大约 1000 万行(数据加载速度非常快),我正在尝试对其进行一些查询,但这些是结果(使用非缓存查询..如果 InfiniDB 中存在查询缓存) :
查询 1(非常快):
select * from mytable limit 150000,1000
1000 rows in set (0.04 sec)
查询 2(立即):
select count(*) from mytable;
+----------+
| count(*) |
+----------+
| 9429378 |
+----------+
1 row in set (0.00 sec)
好吧,这似乎是惊人的快.. 但是:
查询 3:
select count(title) from mytable;
.. still going after several minutes
查询 4:
select id from mytable where id like '%ABCD%';
+------------+
| id |
+------------+
| ABCD |
+------------+
1 row in set (11 min 17.30 sec)
我一定是做错了什么,用这么简单的查询不可能以这种方式执行。有什么想法吗?
【问题讨论】:
-
您在
title和id字段上有索引吗? -
根据 InfiniDB 文档,说:“不需要索引:由于 InfiniDB 透明地使用垂直和逻辑水平分区,所以不需要索引。”
-
我想您可能会发现 ID 不可为空,而标题是,并且您的查询正在计算空值而不是空值以计算结果,这种事情将通过索引来修复,因此使用 em,但由于 infini 不使用 em,因此很有可能试图找出它是否为 null,您是否尝试过 select count(title) where title is not null ????
-
我按照你说的做了,结果是:集合中的 1 行(11 分 37.74 秒),我认为这点不在空值上。我还考虑了硬件限制,但处理器在整个时间内保持在 10%,磁盘保持读取 @120Mb/s ..并且重复 2 次相同的查询需要相同的时间。真正让我担心的是,准时访问单个记录需要花费大量时间。