如何在MySQL仅读取操作中处理超过1000万条记录。
我有两个表,一个是company
,其中保存了公司的记录,即公司名称和所提供的服务,因此有2列,大约有300万条记录,还有另一个表employee
,大约有40列,大约一千万条记录。尝试获取数据时,甚至是简单的查询(例如
Employee::paginate(100);
//In terms of mysql it
//select count(*) as aggregate from 'employee';
//Select * from 'employee' limit 100 offset 0;
过去大约需要30秒钟,而现在却像永远一样。
如果我想进行搜索,应用过滤器或要联接两个表,即company
和employee
,那么有时它可以工作,有时它会崩溃并在SQL中给出很多错误/警告服务器日志。
任何人都可以告诉我如何在不导致SQL Server崩溃的情况下更有效地处理此数量的记录,尤其是在高通信量时间内。
目前,我只有主键,即ID和联合ID已编制索引。
与SO上进行的所有类似查询相比,这是一种重复的帖子,但是这些对我没有多大帮助。
我一直关注的问题
答案 0 :(得分:1)
进行以下更改:
partitioning
。 (例如how to partition a table by datetime column?)simplePaginate
方法代替paginate
。它不查询计数。 (https://laravel.com/docs/5.7/pagination)indexing
。它影响。 (google:mysql索引最佳做法)caching
驱动程序(例如redis
)