我在本地机器上有MYSQL数据库,我正在运行java程序。
我计划创建一个特定表的所有条目的数组列表。从这一点来看,我不会访问数据库来获取表中的特定条目,而是使用创建的数组列表。与访问数据库以获取表中的特定条目相比,这会更快还是更慢?
请注意,我感兴趣的表格大约有200万条。
谢谢。
更多信息:我只需要两个字段。 1个Long类型和1个String类型。表的索引是Long,而不是int。
答案 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)
这个问题太模糊了,可以轻松地取决于:
例如,如果每个记录由几个字节的数据组成,则将它们全部存储在内存中会快得多(尽管不一定是ArrayList)。例如,您可能希望将它们放入TreeSet中。
答案 2 :(得分:0)
这取决于您将对数据执行的操作。如果您只想要几行,则只应从数据库中获取这些行。如果您知道需要所有数据,请继续将整个表加载到java中(如果它可以适合内存)。之后你会用它做什么?连续或随机阅读?数据会改变吗?根据集合的使用方式,Map或Set可能是更快的替代方案。
答案 3 :(得分:0)
是否更快或更慢是可测量的。时间吧。使用存储在内存中的结构比使用位于磁盘上的数据表更快。也就是说,如果你有足够的内存,并且你没有20个用户同时运行相同的进程。
您如何访问数据?你有整数索引吗?
答案 4 :(得分:0)
首先,访问数组列表比访问数据库快得多。访问内存比访问硬盘要快得多。 如果数组中的条目数量很大而且我猜它是,那么你需要考虑使用“直接访问”数据结构,例如HashMap,它将充当数据库表,其中你有按键引用的值