xoa*_*ail 2 mysql large-data bigdata
我有大量数据。我在MySQL表中加载了40GB以上。我正在尝试执行类似的简单查询,select * from tablename但是要花费数百万亿分钟才能运行,最终超时。如果我设置了限制,则执行速度相当快,例如:select * from tablename limit 1000。该表有超过2亿条记录。
关于使用这些类型的数据集的任何提示?
您需要做的第一件事就是完全忽略所有建议其他一些超赞的巨型技术的答案和评论。这绝对是胡扯。这些东西不能以不同的方式工作,因为它们都受同一个问题-硬件的约束。
现在,让我们回到MySQL。问题LIMIT在于MySQL会获取整个数据集,然后LIMIT从开始就需要一定数量的行OFFSET。这意味着,如果您这样做了SELECT * FROM my_table LIMIT 1000,它将占用所有2亿行,并对它们进行缓冲,那么它将从0到999开始计数,并丢弃其余的行。
是的,这需要时间。是的,它看起来很笨。但是,MySQL不知道“开始”或“结束”是什么意思,因此,除非您这样说,否则它不知道限制和偏移是什么。
为了改善搜索效果,您可以使用类似以下的内容(假设您拥有数字主键):
SELECT * FROM tablename WHERE id < 10000 LIMIT 1000;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,MySQL不会处理2亿行,而将处理PK低于10 000的所有行。更容易,更快,也更易读。可以随时调整数字,如果您使用脚本语言执行某种分页,则始终可以传输存在的最后一个数字ID,以便MySQL可以从该ID开始进行搜索。
另外,您应该使用InnoDB引擎,并使用它进行调整,innodb_buffer_pool_size这是使MySQL飞速发展的魔力。