【发布时间】:2011-04-24 11:31:23
【问题描述】:
我有几个大型数据库,超过 1 亿条记录。它们包括以下内容:
- 唯一的密钥。
- 一个整数值,不唯一,但用于对查询进行排序。
- 一个 VARCHAR(200)。
我现在将它们放在 mysql isam 表中。我的想法是,嘿,我只需在数据上设置一个覆盖索引,它应该会以相当快的速度退出。查询的形式...
select valstr,account
from datatable
where account in (12349809, 987987223,...[etc])
order by orderPriority;
在某些测试中这似乎没问题,但在我们较新的安装中,它非常慢。完全没有索引似乎更快,这似乎很奇怪。
无论如何,我在想,也许是一个不同的数据库?我们对系统的其他部分使用数据仓库数据库,但它不太适合文本中的任何内容。任何免费或相当便宜的数据库都是一种选择,只要它们具有相当有用的 API 访问权限。 SQL 可选。
提前致谢。
-凯文
【问题讨论】:
-
一个新的数据库似乎在下结论。你检查过数据库上的 I/O 吗?也许看看索引碎片?分区策略?在放弃当前使用的内容之前,有很多事情需要先检查。
-
还没有,至少不会太多。如果你认为这是一个好的策略,我会这样做。只是想得到一些反馈。由于这是只读数据,我在想,也许有一个数据库做得很好?我将编辑我的问题(如果可能的话,对问题不熟悉)。
-
我不知道如何编辑。好的,所以更详细。这是只读数据。我可以以任何我想要的方式索引它。我非常愿意尝试 mysql 调整。我也可以在应用程序内进行排序,如果这有很大帮助的话。查询的大小通常在 1,000 到 50,000 之间。由于这可能会跳过整个索引,因此我不知道将性能提高到合理状态的最佳计划是什么(显然,合理是相对的,但可以说比表扫描好得多。实际数字很快就会跟进)。
-
您总是按订单优先级排序吗?如果是这样,在该字段上添加聚集索引是有意义的。制作另一个索引来覆盖您选择的字段(valstr、account)并查看它对性能的影响。
-
WHERE ACCOUNT IN () 子句中有多少个帐号?如果 WHERE 子句中只有一个帐号,与拥有 10 个帐号相比,性能如何?
标签: mysql sql mongodb database nosql