与访问mysql数据库中的相同数据相比,访问java列表(arraylist)更快吗?

时间:2011-11-17 15:51:20

标签: java mysql database arraylist

我在本地机器上有MYSQL数据库,我正在运行java程序。

我计划创建一个特定表的所有条目的数组列表。从这一点来看,我不会访问数据库来获取表中的特定条目,而是使用创建的数组列表。与访问数据库以获取表中的特定条目相比,这会更快还是更慢?

请注意,我感兴趣的表格大约有200万条。

谢谢。

更多信息:我只需要两个字段。 1个Long类型和1个String类型。表的索引是Long,而不是int。

5 个答案:

答案 0 :(得分:5)

不,它会慢得多,因为要在ArrayList中找到一个元素,你必须按顺序扫描ArrayList,直到找到你的元素。

它可以更快,几百个条目,因为你没有连接开销,但有两百万条目,MySQL将赢,只要你创建正确的索引。只检索每次实际需要的行。

你为什么要这样做?您遇到的查询速度慢吗?

要查找,请在my.cnf中激活慢查询日志,取消注释(或添加)以下行。

# Here you can see queries with especially long duration
log_slow_queries    = /var/log/mysql/mysql-slow.log
long_query_time = 1

然后查看哪些查询需要很长时间,并在前面使用EXPLAIN运行它们,考虑添加索引,其中explain命令告诉您不使用索引,或者仅使用CREATE TABLE语句和示例发布新问题查询优化。

答案 1 :(得分:1)

这个问题太模糊了,可以轻松地取决于:

  1. 每个记录中有多少个字段,字段有多大?
  2. 您要进行什么样的访问?文字搜索?顺序?
  3. 例如,如果每个记录由几个字节的数据组成,则将它们全部存储在内存中会快得多(尽管不一定是ArrayList)。例如,您可能希望将它们放入TreeSet中。

答案 2 :(得分:0)

这取决于您将对数据执行的操作。如果您只想要几行,则只应从数据库中获取这些行。如果您知道需要所有数据,请继续将整个表加载到java中(如果它可以适合内存)。之后你会用它做什么?连续或随机阅读?数据会改变吗?根据集合的使用方式,Map或Set可能是更快的替代方案。

答案 3 :(得分:0)

是否更快或更慢是可测量的。时间吧。使用存储在内存中的结构比使用位于磁盘上的数据表更快。也就是说,如果你有足够的内存,并且你没有20个用户同时运行相同的进程。

您如何访问数据?你有整数索引吗?

答案 4 :(得分:0)

首先,访问数组列表比访问数据库快得多。访问内存比访问硬盘要快得多。 如果数组中的条目数量很大而且我猜它是,那么你需要考虑使用“直接访问”数据结构,例如HashMap,它将充当数据库表,其中你有按键引用的值